1

PythonCOMスレッドから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 メソッドを直接呼び出すことはできません。メインの GUI スレッドと通信するには、wxPython のスレッドセーフなメソッドの 1 つを使用する必要があります。それらは wx.CallAfter、wx.CallLater、wx.PostEvent です。

wxPython wikiには、スレッドと wx に関する多くの情報があります。また、役立つかもしれないテーマに関するチュートリアルも書きました。

于 2013-02-01T18:37:25.667 に答える