Ich versuche Mausbewegungen (gepressten/unpressed) mit einigen Methoden zu binden. Ich habe versucht, Mausbewegungen zu handhaben, während die Maustaste mit '' und die andere mit nur '' gedrückt wird. Ich fand, dass, wenn ich nur ..bind haben (‚‘, somemethod1), somemethod1 unabhängig von Maustaste drücken genannt wird, aber wenn ich auch ..bind haben (‚‘, somemethod2) wird somemethod1 nicht aufgerufen, wenn Maustaste war gedrückt. Hinzufügen von 'add =' + '' schien nicht zu funktionieren.tkinter maximale Rekursionstiefe überschritten, während ein Ereignis zu erzeugen
def bind_mouse(self):
self.canvas.bind('<Button1-Motion>', self.on_button1_motion1)
self.canvas.bind('<Motion>', self.on_mouse_unpressed_motion1)
def on_button1_motion1(self, event):
print(self.on_button1_motion1.__name__)
def on_mouse_unpressed_motion1(self, event):
print(self.on_mouse_unpressed_motion1.__name__)
So modifizierte ich stattdessen die on_button1_motion1 Methode wie folgt:
def on_button1_motion1(self, event):
print(self.on_button1_motion1.__name__)
self.canvas.event_generate('<Motion>')
Aber wenn ich schon versucht, diese habe ich diesen Laufzeitfehler:
Traceback (jüngste Aufforderung zuletzt): Datei "D:/speichern/WORKSHOP/py/tkinter/Riss/Pycrosoft Paintk/view.py", Linie 107, in root.mainloop() Datei „C: \ Benutzer \ smj \ AppData \ Local \ Programme \ Python \ Python35 \ lib \ tkinter__init __. Py ", Zeile 1131, in Hauptschleife self.tk.mainloop (n) RekursionError: maximale Rekursionstiefe überschritten
Kann mir jemand erklären, warum das passiert? Ich weiß, dass ich dieses Problem lösen kann, indem ich on_mouse_unpressed_motion1 Methode innerhalb on_button1_motion1 Methode aufrufen, anstatt ein Ereignis zu generieren, aber ich würde gerne wissen, warum der andere Weg nicht funktioniert. Danke
Hm, also meinst du, wenn ich das Ereignis '' beim Hören des Ereignisses '' erstelle, wird on_button1_motion1 aufgerufen, weil "auf Register Register"? Interessant. Ich habe das niemals gewusst. –
Bedeutet "lauscht für" während der Befehl (Methode) für dieses Ereignis ausgeführt wird (vor der Rückkehr)? –
Es tut mir leid, ich habe einen Fehler gemacht: '' löst nicht immer den Rückruf für '' aus. Ich habe Ihr Programm neu erstellt und das gleiche Verhalten gefunden. Das Problem ist, dass das Erzeugen des Ereignisses "" **, wenn die Schaltfläche bereits gedrückt wird, ** ein weiteres "" -Ereignis generiert (weil die Schaltfläche gedrückt ist und Sie Motion generieren!). Zu Ihrer letzten Frage: Ja, während Sie die Callback-Funktion sind die Ausführung 'on_button1_motion1' wird das Widget hören noch für weitere Veranstaltungen, und Sie erstellen eine andere‚‘Ereignis, während die Taste gedrückt wird, so ist es‚< Schaltfläche1-Bewegung> '. –
krork