2011-01-14 1 views
4

Я делаю программу, в которой я использую wxStatusBar, когда начнется загрузка я начинаю ребенок нить, как это:Нить WxPython и статусная

def OnDownload(self, event): 
    child = threading.Thread(target=self.Download) 
    child.setDaemon(True) 
    child.start() 

Скачать другую функция без параметров (кроме самостоятельно). Я хотел бы обновить свою панель статусов оттуда с некоторой информацией о ходе загрузки, но когда я пытаюсь это сделать, я часто получаю ошибки Xwindow, glib и segfaults. Любая идея решить это?

Решено: мне просто нужно включить wx.MutexGuiEnter() перед изменением что-то в графическом интерфейсе внутри нити и wx.MutexGuiLeave(), когда закончил. Например

def Download(self): 
    #stuff that doesn't affect the GUI 
    wx.MutexGuiEnter() 
    self.SetStatusText("This is a thread") 
    wx.MutexGuiLeave() 

И это все: D

ответ

0

Как вы обновление строки состояния?

Я думаю, что вы должны быть в порядке, если вы создадите собственное событие, а затем опубликуете его через wx.PostEvent, чтобы уведомить рамку/строку состояния в потоке графического интерфейса.

Для загрузки прогресса в строке состояния, вы можете ваше мероприятие, чтобы выглядеть следующим образом:

DownloadProgressEvent, EVT_DL_PROGRESS = wx.lib.newevent.NewEvent() 

# from the thread... 

event = DownloadProgressEvent(current=100, total=1000, filename="foo.jpg") 
wx.PostEvent(frame, event) 

# from the frame: 

def OnDownloadProgress(self, event): 
    self.statusbar.update_dl_msg(event.current, event.total, event.filename) 

Here's some more detail from the wxPython wiki.

 Смежные вопросы

  • Нет связанных вопросов^_^