1

我正在尝试将来自 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:\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 中的那个仪表。任何有关如何做到这一点的帮助都将非常有帮助。

4

1 回答 1

1

您不能直接从单独的线程调用 wx 方法。您需要使用其中一种 wxPython 线程安全方法与主 GUI 线程进行通信。它们是 wx.CallAfter、wx.CallLater 和 wx.PostEvent。

wxPython wiki上有很多关于线程和 wx 的信息。我还写了一篇关于这个主题的教程,可能会对你有所帮助。

于 2013-02-01T18:37:25.667 回答