Seite 1 von 1
[noch nicht gelöst] - Rechenoperation mit + Position
Verfasst: Dienstag 20. September 2011, 13:37
von jtschoch
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
Re: Rechenoperation mit + Position
Verfasst: Dienstag 20. September 2011, 15:10
von gkuhl
Wie die Fehlermeldung schon sagt musst du den Integer in einen String umwandeln und schon klappt es:
Grüße
Gerrit
Re: Rechenoperation mit + Position
Verfasst: Dienstag 20. September 2011, 19:42
von jtschoch
vielen Dank

Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 08:37
von jtschoch
Oben das Funktioniert nicht,
nur wen das fenster auf der 0 pos steht!
Weil man kann keinen String Rechnen:
Das Passiert auch bei mir,
aber es soll 3 rauskommmen und so geht's
aber wie wandle ich mein string zu keinen string um?
Hat sich erledigt habe mir noch mal die Fehlermeldung angeschaut!
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>
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 15:52
von Krabman318
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.
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 17:20
von jtschoch
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?
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 17:30
von cofi
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
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 17:38
von Hyperion
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?"

Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 18:51
von jtschoch
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)

Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 19:03
von deets
*facepalm*
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 19:05
von 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.
Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 19:07
von Hyperion
Kleiner Tipp:
Jetzt fehlt nur noch ein Aufruf und Du hast ein lauffähiges Beispiel

Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 19:12
von cofi
So entlarvt man sich selbst: Der Text vor dem Schnipsel wollte gelesen werden, du bist direkt in den Fallstrick gelaufen.
@deets: Genau.

Re: Rechenoperation mit + Position
Verfasst: Mittwoch 21. September 2011, 19:16
von jtschoch
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)
Re: Rechenoperation mit + Position
Verfasst: Freitag 23. September 2011, 14:57
von jtschoch
Kann mir keiner Helfen?