我正在尝试将计数器从python COM线程传递回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:Python27libthreading.py", line 551, in __bootstrap_inner
self.run()
File "F:Documents and SettingsswhiteDesktopOG GUI Working Jan 13nbm.py", line 267, in run
int_log.TabPanel.gauge.SetValue(int_log_cnt)
AttributeError: type object 'TabPanel' has no attribute 'gauge'
我将如何将我的计数器从我的外部线程发送回 wxpython 中的该仪表。 任何关于如何做到这一点的帮助都将非常有帮助。
不能直接从单独的线程调用 wx 方法。您需要使用 wxPython 线程安全方法之一与主 GUI 线程进行通信。他们是wx。CallAfter, wx.CallLater和wx。事后。
在wxPython wiki上有很多关于threads和wx的信息。我还写了一个关于这个主题的教程,可能会对你有所帮助。