wxPython: Threading-GUI -> Verwenden des benutzerdefinierten Ereignishandlers
Ich versuche zu lernen, wie ich einen Thread von der Haupt-GUI-App ausführen kann, um meinen seriellen Port zu senden / empfangen, während meine GUI am Leben bleibt. Meine besten Googling-Versuche haben mich im wxpython-Wiki unter folgender Adresse gelandet:http://wiki.wxpython.org/LongRunningTasks das bietet mehrere Beispiele. Ich habe mich darauf festgelegt, das erste Beispiel zu lernen, bei dem ein Arbeitsthread gestartet wird, wenn die jeweilige Schaltfläche ausgewählt ist.
Ich habe Probleme, die benutzerdefinierte Ereignisdefinition zu verstehen:
def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)
class ResultEvent(wx.PyEvent):
"""Simple event to carry arbitrary result data."""
def __init__(self, data):
"""Init Result Event."""
wx.PyEvent.__init__(self)
self.SetEventType(EVT_RESULT_ID)
self.data = data
In erster Linie die
def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)
Ich denke, EVT_RESULT wird außerhalb der Klassen platziert, um es für beide Klassen aufrufbar zu machen (global machen?)
Und .. die Haupt-GUI-App überwacht den Fortschritt des Threads über:
# Set up event handler for any worker thread results
EVT_RESULT(self,self.OnResult)
Ich bemerke das auch in vielen Beispielen, wenn der Autor es benutzt
from wx import *
sie binden einfach Dinge durch
EVT_SOME_NEW_EVENT(self, self.handler)
im Gegensatz zu
wx.Bind(EVT_SOME_NEW_EVENT, self.handler)
Was mir nicht hilft, es schneller zu verstehen. Vielen Dank,