Frage

Wie rufen Sie eine tkinter event aus einem separaten Objekt?

Ich bin auf der Suche nach so etwas wie wxWidgets wx.CallAfter. Zum Beispiel, wenn ich ein Objekt erstellen, und übergebe es meine Tk Rootinstanz, und dann versuchen, ein Verfahren zur Herstellung dieser Root-Fenster von meinem Objekt aufzurufen, meine App abstürzt.

Das Beste, was ich mit oben kommen kann ist das die after Methode zu verwenden und den Status von meinem separaten Objekt überprüfen, aber das scheint verschwenderisch.

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten, „Wie rufen Sie ein TkInter Ereignis aus einem separaten Objekt“, verwenden Sie den Befehl event_generate. Es ermöglicht Ihnen, Ereignisse in die Ereigniswarteschlange der Root-Fenster zu injizieren. In Kombination mit leistungsfähigem virtuellen Event-Mechanismus des Tk wird es ein handlicher Message-Passing-Mechanismus.

Zum Beispiel:

from tkinter import *

def doFoo(*args):
    print("Hello, world")

root = Tk()
root.bind("<<Foo>>", doFoo)

# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")

Beachten Sie, dass der event_generate Anruf sofort zurück. Es ist nicht klar, ob das, was Sie wollen oder nicht. Generell Sie nicht ein Ereignis basiertes Programm auf eine Antwort auf ein bestimmtes Ereignis zu blockieren warten, weil es die GUI einfrieren .

Ich bin mir nicht sicher, ob dies Ihr Problem löst, obwohl; ohne den Code zu sehen, ich bin nicht sicher, was Ihr eigentliches Problem ist. Ich kann zum Beispiel Zugriffsmethoden von Wurzel im Konstruktor eines Objekts, wo die Wurzel in der ohne Anwendung Perren geben wird. Das sagt mir, es ist etwas anderes in Ihrem Code geht.

Hier ist ein Beispiel für erfolgreich Zugriff auf Methoden auf einem Root-Fenster von einem anderen Objekt:

from tkinter import *

class myClass:
    def __init__(self, root):
        print("root background is %s" % root.cget("background"))

root = Tk()
newObj = myClass(root)

Andere Tipps

Hier unten nur einige doc und Link zu einer besseren Bryans Antwort oben zu verstehen.

Beschreibung der Funktion von New Mexico Tech :

w.event_generate(sequence, **kw)

  

Dieses Verfahren verursacht ein Ereignis ohne externe Stimulus ausgelöst wird. Die Handhabung der Veranstaltung ist das gleiche wie wenn es durch einen externen Stimulus ausgelöst worden war. Die Sequenz Argument beschreibt das Ereignis ausgelöst werden. Sie können Werte für ausgewählte Felder in dem Event-Objekt gesetzt durch Schlüsselwort = Wert Argument bereitstellt, wobei das Schlüsselwort den Namen eines Feldes in dem Event-Objekt angibt.

Liste und Beschreibung von Tcl / Tk Ereignisattribute hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top