Zum ausführen von code, wenn eine Tkinter-widget-value-änderungen?
Bin ich mit Python und Tkinter
, und ich will, das äquivalent von onchange
Veranstaltung aus anderen toolkits/Sprachen. Ich möchte code ausführen, wenn der Benutzer die updates der Zustand der einige widgets.
In meinem Fall, ich habe viele Entry
, Checkbutton
, Spinbox
und Radiobutton
widgets. Wenn eine dieser änderungen, ich will mein code (in diesem Fall aktualisieren Sie ein Textfeld auf die andere Platte).
(denken Sie daran, dass Benutzer kann die Interaktion mit diesen widgets über die Maus oder die Tastatur, und sogar mit Hilfe von Strg+V zum einfügen von text)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich die richtige Methode ist die Verwendung
trace
auf eine tkinter-variable zugewiesen wurde, um ein widget.Zum Beispiel...
Den
w
im trace sagt tkinter immer wenn jemand schreibt (updates) der variable, was passieren würde, jedes mal, jemand schrieb etwas in das Entry-widget, tunoddblue
. Die trace übergibt immer drei Werte an, was auch immer Funktion, die Sie aufgeführt haben, so müssen Sie erwarten, dass Sie in Ihrer Funktion, dahera,b,c
. Ich in der Regel nichts mit Ihnen als alles, was ich brauche, ist lokal definiert trotzdem. Was ich sagen kanna
ist die variable Objekt,b
leer ist (nicht sicher, warum), undc
ist der trace-Modus (d.h.w
).Für mehr info auf tkinter Variablen, check this out.
.update_idletasks()
ist nicht erforderlich hier.Wie ich dies lösen in Tcl wäre, um sicherzustellen, dass die checkbox", spinbox-und radiobutton-widgets sind alle im Zusammenhang mit einer array-Variablen. Ich würde dann eine Spur gelegt, die auf dem array, die Ursache wäre eine Funktion, die aufgerufen werden, jedes mal, dass die variable geschrieben wird. Tcl macht dies trivial.
Leider Tkinter nicht unterstützt arbeiten mit Tcl-arrays. Glücklicherweise ist es ziemlich einfach zu hacken. Wenn Sie abenteuerlustig sind, versuchen Sie den folgenden code.
Von der vollständigen Offenlegung Abteilung: ich warf das zusammen, heute morgen in etwa eine halbe Stunde. Ich habe nicht wirklich verwendet diese Technik in einer realen code. Ich konnte nicht widerstehen, die Herausforderung, um herauszufinden, wie die Verwendung von arrays mit Tkinter.
Es ist ziemlich spät, aber doch noch jemand etwas gefunden, das nützlich sein könnten.
Die ganze Idee kommt aus @bryan Oakley post
Wenn ich gut verstehe, das größte problem ist die detech Eintrag widgets . Um erkennen es in
spinbox
,Checkbutton
undRadiobutton
können Siecommand
Optionen beim erzeugen von widget.Fangen die
<onChange>
imEntry
widget, das Sie verwenden können Bryan ' s Ansatz mit Tcl, das erzeugt dieses Ereignis. Wie gesagt, das ist nicht meine Lösung, ich habe nur verändert es etwas für diesen Fall.Beispiel:
Natürlich ändern, erstellen Sie verschiedene callback-für viele Instanzen (wie Sie in der Frage genannten) ist einfach jetzt.
Ich hoffe, jemand findet es nützlich.
widget.config(command=...)
So weit, ich habe es nicht erlebt, dass irgendeine Sache, entspricht der onChange-in Tkinter.
Widgets gebunden werden können, um die verschiedenen Ereignisse und ich das getan habe, ausdrücklich.