Я следую примеру, приведенному в http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
У меня есть нить, которая проверяет сервер sftp на наличие новых файлов каждые 30 секунд.Если он находит файлы, он загружает их в базу данных, а затем должен инициировать обновление определенных элементов графического интерфейса, которые будут перезагружаться из базы данных.
Код пользовательского события:
EVT_RESULT_ID = wx.NewId()
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
Поток ftp:
class FTPThread(threading.Thread):
def __init__(self,wxObject):
"""Init Worker Thread Class."""
threading.Thread.__init__(self)
self.wxObject = wxObject
self._stop = threading.Event()
self._stop.set()
self.start() # start the thread
def run(self):
while True:
time.sleep(30)
if not self._stop.isSet():
wx.CallAfter(self.parseFTP)
def stop(self):
self._stop.set()
def resume(self):
self._stop.clear()
def parseFTP(self):
#connect to db
...
#connect to sftp site
...
files_found=False
#process each file and delete
for file in dirlist:
files_found=True
...#process into db
sftp.remove(file)
sftp.close()
t.close()
#trigger update event if files found
if files_found==True:
wx.PostEvent(self.wxObject, ResultEvent("Files found"))
Один из элементов графического интерфейса:
class MyGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent,-1,style=wx.EXPAND)
self.parent=parent
...
self.update()
EVT_RESULT(self, self.updateFromEvent)
def updateFromEvent(self,event):
self.update()
def update(self):
...
После отладки создается wx.PostEvent, но не запускается какой-либо ответ в сетке.
Единственное различие, которое я могу найти между примером и моим кодом, состоит в том, что в примере EVT_RESULT находится в основном фрейме, а не в элементе графического интерфейса - требуется ли это?