Wxpython: threading GUI -> Utilizzo del gestore di eventi personalizzati
-
23-09-2019 - |
Domanda
Sto cercando di imparare a eseguire un thread dall'app GUI principale per eseguire l'invio/ricezione della porta seriale mantenendo viva la mia GUI. I miei migliori tentativi di googling mi hanno portato al wiki Wxpython: http://wiki.wxpython.org/longrunningtass che fornisce diversi esempi. Ho deciso di apprendere il primo esempio, prevedendo l'avvio di un thread del lavoratore quando viene selezionato il pulsante particolare.
Ho difficoltà a capire la definizione di evento personalizzato:
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
Principalmente il
def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)
Penso che EVT_RESULT sia posizionato fuori dalle classi in modo da renderlo richiamato da entrambe le classi (rendendolo globale?)
E .. L'app principale della GUI monitora i progressi del thread tramite:
# Set up event handler for any worker thread results
EVT_RESULT(self,self.OnResult)
Noto anche che in molti esempi, quando lo scrittore usa
from wx import *
semplicemente legano le cose da
EVT_SOME_NEW_EVENT(self, self.handler)
al contrario di
wx.Bind(EVT_SOME_NEW_EVENT, self.handler)
Il che non mi aiuta a capirlo più velocemente. Grazie,
Soluzione
Il contenuto è stato correttamente ri-indicizzato dopo aver effettuato le modifiche?A seconda della versione e delle impostazioni dell'ambiente, le nuove autorizzazioni potrebbero non avere effetto nei risultati della ricerca fino a quando il contenuto non è strisciato.
Altri suggerimenti
Questo è il vecchio stile di definire eventi personalizzati. Vedere la guida alla migrazione per maggiori informazioni.
Preso dalla Guida alla migrazione:
Se crei i tuoi tipi di eventi personalizzati e le funzioni EVT_* e si desidera essere in grado di utilizzarli con il metodo BIND sopra, dovresti cambiare il tuo evt_* per essere un'istanza di
wx.PyEventBinder
invece di una funzione. Ad esempio, se avevi qualcosa del genere:myCustomEventType = wxNewEventType() def EVT_MY_CUSTOM_EVENT(win, id, func): win.Connect(id, -1, myCustomEventType, func)
Cambiarlo così:
myCustomEventType = wx.NewEventType() EVT_MY_CUSTOM_EVENT = wx.PyEventBinder(myCustomEventType, 1)
Ecco un altro post Che ho fatto con un paio di programmi di esempio che fanno esattamente quello che stai cercando.
Un'opzione è di e-mail Abilitare la libreria dei documenti in cui si desidera inviare il file, utilizzare questo indirizzo e-mail per inviare e-mail il server SharePoint e memorizzerà il report nella Biblioteca Documenti.Ho usato questa tecnica in passato con un server SSRS non in modalità integrata per fornire report in programma a SharePoint.
Questo presuppone che la tua sharepoint farm abbia un'e-mail in entrata configurata.