Передать счетчик из потока Python в датчик wxpython?

Я пытаюсь передать счетчик из COM-потока Python обратно на вкладку wxpython. У кого-нибудь есть решение, которое будет работать. Некоторые из моего кода ниже:

Этот класс отделен от моего кода wxPython, но вызывается и данные отправляются в этот поток.

class Log_COM_thread(Thread): ............ def run(self):
.............
int_log_cnt = int_log_cnt + 1
int_log.TabPanel.gauge.SetValue(int_log_cnt)
if int_log_cnt == 64:
int_log.TabPanel.Int_Log_Status.SetLabel('Extraction Complete')

Отдельный модуль, int_log, в который отправляется это значение счетчика, вызывается следующим образом:

class TabPanel(wx.Panel):
def __init__(self, parent):
self.gauge = wx.Gauge(self, range=72, size=(250, 25))
.....and then more wxpython code.

Ошибка, с которой я сталкиваюсь:

Exception in thread Thread-8:
Traceback (most recent call last):
File "F:\Python27\lib\threading.py", line 551, in __bootstrap_inner self.run()
File "F:\Documents and Settings\swhite\Desktop\OG GUI Working Jan 13\nbm.py", line 267, in run
int_log.TabPanel.gauge.SetValue(int_log_cnt)
AttributeError: type object 'TabPanel' has no attribute 'gauge'

Как мне отправить свой счетчик обратно на этот датчик в wxpython из моего внешнего потока. Любая помощь в том, как это сделать, была бы чрезвычайно полезной.


person Sherd    schedule 01.02.2013    source источник


Ответы (1)


Вы не можете вызывать методы wx напрямую из отдельного потока. Вам нужно использовать один из потокобезопасных методов wxPython для обратной связи с основным потоком графического интерфейса. Это wx.CallAfter, wx.CallLater и wx.PostEvent.

Много информации о потоках и wx можно найти на вики wxPython. Я также написал руководство по теме, которая может помочь тебе.

person Mike Driscoll    schedule 01.02.2013
comment
Учебник очень полезен. Благодарю вас! - person Sherd; 04.02.2013