[noch nicht gelöst] - Rechenoperation mit + Position

Fragen zu Tkinter.
Antworten
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hey Leute,

Ich habe wiedermal ein Problem.
Ich möchte so schnell wie möglich díe nächte Version meines wwwSearchdesk - Programm raus bringen.
In der 0.5 habe ich folgendes geplant:
----------------------------------------------------------
ein Einstellungsfenster,
da man verschiedene Suchmaschinen auswählen kann.
-----------------------------------------------------------

Problem ist ich möchte es genau unter das andere Fenster anordnen.
Der Gripper schreibt die werte in ein TXT- Dokument.
Ich rufe das mit mein Hautfenster wieder auf und hole die Letzte
Position.
Das selbe soll auch mit mein anderen Fenster geschehen,
aber es soll ein bisschen weiter nach unten gerückt werden,
da bekomme ich folgente Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "J:\JT_proj\python\wwwSearchdesk\pywwwseachdesk.pyw", line 139, in <module>
    configure()
  File "J:\JT_proj\python\wwwSearchdesk\pywwwseachdesk.pyw", line 131, in configure
    pos = desktopposition1[1] + 10
TypeError: cannot concatenate 'str' and 'int' objects
Die Meldung habe ich schon verstanden,
aber wie bekomme ich den wert addiert,
oder das es kein string mehr ist?

Mein Code:

Code: Alles auswählen

    
def configure(desktopposition1 = desktopposition):
    pos = desktopposition1[1] + 10
    root = Tk()
    root.geometry('300x165') 
    root.geometry("+{0}+{1}".format(desktopposition1[0], pos))
    root.title("Webseach")
    root.config(bg = "#000000") #E3E2E9
    root.overrideredirect(True)
    root.attributes("-alpha", 0.8)
configure()
Aktuelle Version gibt's hier
Zuletzt geändert von jtschoch am Mittwoch 12. Oktober 2011, 15:06, insgesamt 1-mal geändert.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Wie die Fehlermeldung schon sagt musst du den Integer in einen String umwandeln und schon klappt es:

Code: Alles auswählen

pos = desktopposition1[1] + str(10)
Grüße
Gerrit
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

vielen Dank :!: :lol:
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Oben das Funktioniert nicht,
nur wen das fenster auf der 0 pos steht!
Weil man kann keinen String Rechnen:

Code: Alles auswählen

str1 = "1"
str2 = "2"
str1+str2
'12'
Das Passiert auch bei mir,
aber es soll 3 rauskommmen und so geht's
aber wie wandle ich mein string zu keinen string um?

Code: Alles auswählen

str1 = 1
str2 = 2
str1+str2
3
Hat sich erledigt habe mir noch mal die Fehlermeldung angeschaut!

Code: Alles auswählen

pos =  int(desktopposition1[1]) + (65)
Man mus den String in einen Integer umwandeln.
Das gegenteil das was gkuhl gesagt hat!
Wie die Fehlermeldung schon sagt musst du den Integer in einen String umwandeln und schon klappt es:
___________________________________________________________
Ich habe aber noch ein Problem,
wenn ich das Fenser verschiebe lerschiebt sich nur das obere Fenster.
Also wollte ich die Positionswerte übergeben das nicht Funktioniert.
Ich habe das ganze so Probiert:

Code: Alles auswählen

#~Braucht_man_wenn_mann_das_Fenster_bewegen_will
class Gripper(Frame):
    
    def __init__(self, master, cnf={}, **kwargs):
        cnf.update({"relief":"flat", "borderwidth":1})
        Frame.__init__(self, master, cnf, **kwargs)
        self.bind("<B1-Motion>", self._drag)

    def _drag(self, event):
        self.master.geometry("+{0}+{1}".format(event.x_root, event.y_root))
        x = event.x_root
        y = event.y_root + 65
        #~Schreibt in ein Dokument die aktuelle Position
        position = open('daten.cfd', 'w')
        position.write("{0} {1}".format(event.x_root, event.y_root))
        position.close()
##########################################################
#~Setzt den Gripper an die richtige Stelle        
gripper = Gripper(root, height=10, bg = "#000000")
gripper.place(relx=0, rely=0, relwidth=1.0, relheight=2.0)
##############################################################

def configure(desktopposition1 = desktopposition, x = Gripper._drag, y = Gripper._drag):
    pos = desktopposition1[1] + str(65)
    root = Tk()
    print x
    #print y
    root.geometry('300x165') 
    root.geometry("+{0}+{1}".format(desktopposition1[0], pos))
    root.title("Webseach")
    root.config(bg = "#000000") #E3E2E9
    root.overrideredirect(True)
    root.attributes("-alpha", 0.8)
configure()

#~Hauptfenster
leingabe = ttk.Label(root,text = "Adresse:",style = "BW.TLabel",
                         font=('Arial',11))
leingabe.place(relx=0.01, rely=0.12)
eeingabe = ttk.Entry(root,font=('Arial',11))

eeingabe.place(relx=0.235, rely=0.13, relwidth=0.68, relheight=0.3)
eeingabe.insert(1,"http://") 
#~Man kann einenSuchbegriff o der eine Adresse eingeben
################################################################################
Ergebnis ist da:
<unbound method Gripper._drag>
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Was mir sofort auffällt:
Du meinst wahrscheinlich die Instanz gripper, nicht die Klasse Gripper.
Mit Gripper._drag rufst du keine Methode auf.
Da die Methode _drag keinen Wert zurückgibt, verstehe ich nicht, was print x soll.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Ich möchte die werte(Positionswerte) holen.
z.B.

Code: Alles auswählen

class Beispiel():
       def  pos():
             x = 300
             y = 400
def holen(Beispiel.pos):
      print x
      print y
So habe ich es probiert^^
Er soll die daten von Beispiel.pos holen (mit get habe ich es auch schon versucht)
Das soll übergeben werden,
aber das Funktioniert nicht!

Wie kann ich das machen das aus Beispiel.pos den wert x und y bekomme?
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wow. Hoer mit allem auf und lies erstmal das Tutorial (erneut):

Eine Funktion nimmt als Argument nicht das Attribut einer Klasse, oder einen sonstigen Namen, sondern fuehrt einen _neuen Namen_ ein (`.' sind in Namen ungueltig).
Funktionsdefinitionen in Klassen werden zu Methoden und brauchen deshalb mindestens ein Argument, `self`.
...

Code: Alles auswählen

class Beispiel():
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def  pos():
        return self.x, self.y

def holen(beispiel):
    x,y = beispiel.pos()
    print x
    print y
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

cofi hat geschrieben:Wow. Hoer mit allem auf und lies erstmal das Tutorial (erneut):
Da sind Hopfen und Malz verloren! Seine Postings werden auch immer kreativer... jetzt mit grüner Schrift und Zweiteilung in mehrere Fragen... dazu noch die "Rechenproblematik" mit `int`... wie war das "wie wandle ich meinen String zu keinen String um?" :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Bloß blöd dass, das Beispiel von cofi nicht Funktioniert.
Wenn ich holen aufrufe kommt es zu der Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "H:\JT_proj\python\wwwSearchdesk\text.py", line 12, in <module>
    holen()
TypeError: holen() takes exactly 1 argument (0 given)
Und bei Beispiel:

Code: Alles auswählen

Traceback (most recent call last):
  File "H:\JT_proj\python\wwwSearchdesk\text.py", line 12, in <module>
    Beispiel()
TypeError: __init__() takes exactly 3 arguments (1 given)
Und bei Beispiel.pos()

Code: Alles auswählen

Traceback (most recent call last):
  File "H:\JT_proj\python\wwwSearchdesk\text.py", line 12, in <module>
    Beispiel.pos()
TypeError: unbound method pos() must be called with Beispiel instance as first argument (got nothing instead)
:cry: :!: :?: :?:
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
BlackJack

@jtschoch: Bei der `pos()`-Signatur fehlt in der Tat das `self`-Argument. Sonst sollte das Beispiel aber funktionieren. Du müsstest es dann aber auch fehlerfrei übernehmen und ein Exemplar von Beispiel erstellen mit dem Du `holen()` aufrufst und nicht versuchen die ungebundene Methode auf der Klasse aufzurufen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kleiner Tipp:

Code: Alles auswählen

b = Beispiel(1, 2)
Jetzt fehlt nur noch ein Aufruf und Du hast ein lauffähiges Beispiel :roll:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

So entlarvt man sich selbst: Der Text vor dem Schnipsel wollte gelesen werden, du bist direkt in den Fallstrick gelaufen.

@deets: Genau. :(
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Danke!!!
-------------------

Aber( __init__) ist schon vergeben.
Es geht ja um den Gripper bei _drag(), der die positionsdaten an configure() übermitteln soll,
das ist noch der Haken.
Könnt ihr mir bitte sagen wie ich das machen soll :?: :K :?


Hier noch mal die Code:

Code: Alles auswählen

class Gripper(Frame):
    
    def __init__(self,master, cnf={}, **kwargs):
        cnf.update({"relief":"flat", "borderwidth":1})
        Frame.__init__(self, master, cnf, **kwargs)
        self.bind("<B1-Motion>", self._drag)

    def _drag(self, event):
        self.master.geometry("+{0}+{1}".format(event.x_root, event.y_root))
        self.x = event.x_root
        self.y = event.y_root + 65
        #~Schreibt in ein Dokument die aktuelle Position
        position = open('daten.cfd', 'w')
        position.write("{0} {1}".format(event.x_root, event.y_root))
        position.close()

##########################################################
#~Setzt den Gripper an die richtig e Stelle        
gripper = Gripper(root, height=10, bg = "#000000")
gripper.place(relx=0, rely=0, relwidth=1.0, relheight=2.0)
##############################################################

def configure(desktopposition1 = desktopposition):
    y,x = Gripper._drag()
    root = Tk()
    pos =  int(desktopposition1[1]) + (65)
    print x
    print y
    root.geometry('300x165') 
    root.geometry("+{0}+{1}".format(desktopposition1[0], pos))
    root.title("Webseach")
    root.config(bg = "#000000") #E3E2E9
    root.overrideredirect(True)
    root.attributes("-alpha", 0.8)
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Kann mir keiner Helfen?
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Antworten