WXPython: Threading -GUI -> Verwenden Sie einen benutzerdefinierten Ereignishandler
-
23-09-2019 - |
Frage
Ich versuche zu lernen, wie man einen Thread von der Haupt -GUI -App ausführt, um meinen seriellen Port zu senden/zu empfangen, während ich meine GUI am Leben erhalten kann. Meine besten Googeln -Versuche haben mich beim WXPython Wiki aufgebracht: http://wiki.wxpython.org/longrunnunnnneds Dies liefert mehrere Beispiele. Ich habe mich dafür entschieden, das erste Beispiel zu lernen, wenn die bestimmte Taste ausgewählt wird.
Ich habe Probleme, die kundenspezifische Event-Definition 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 der
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 von beiden Klassen aufrufen zu lassen (es 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 auch, dass in vielen Beispielen, wenn der Schriftsteller verwendet
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)
Das hilft mir nicht, es schneller zu verstehen. Vielen Dank,
Lösung
wurde der Inhalt ordnungsgemäß neu indexiert, nachdem Sie Ihre Änderungen getroffen haben?Je nach Ihren Versionen und Umgebungseinstellungen werden die neuen Berechtigungen möglicherweise nicht in den Suchergebnissen wirksam, bis der Inhalt gekrochen ist.
Andere Tipps
Das ist der alte Stil der Definition benutzerdefinierter Ereignisse. Sehen Der Migrationshandbuch für mehr Informationen.
Aus dem Migrationsleitfaden entnommen:
Wenn Sie Ihre eigenen benutzerdefinierten Ereignisstypen und EVT_* -Funktionen erstellen und in der Lage sein möchten, sie mit der obigen Bind -Methode zu verwenden, sollten Sie Ihre EVT_* so ändern, dass sie eine Instanz von sein
wx.PyEventBinder
statt einer Funktion. Zum Beispiel, wenn Sie früher so etwas hatten:myCustomEventType = wxNewEventType() def EVT_MY_CUSTOM_EVENT(win, id, func): win.Connect(id, -1, myCustomEventType, func)
Ändern Sie es so:
myCustomEventType = wx.NewEventType() EVT_MY_CUSTOM_EVENT = wx.PyEventBinder(myCustomEventType, 1)
Hier ist ein weiterer Beitrag dass ich mit ein paar Beispielprogrammen gemacht habe, die genau das tun, was Sie suchen.
Eine Option ist die E-Mail-Adresse Aktivieren Sie die Dokumentbibliothek, in der Sie die Datei senden möchten, dann verwenden Sie diese E-Mail-Adresse, um den SharePoint-Server per E-Mail zu senden und den Bericht in der Dokumentbibliothek zu speichern.Ich habe diese Technik in der Vergangenheit mit einem SSRS-Server verwendet, der nicht im integrierten Modus, um Berichte zum Zeitplan für SharePoint bereitzustellen.
Dies setzt voraus, dass Ihre SharePoint-Farm eingehende E-Mails konfiguriert ist.