2010-08-15 37 views
0

我有一個使用XRC設計的wxpython應用程序,它在嵌套的boxlayouts中有一個多行textctrl。Wxpython應用程序異常退出

使用的SetValue()用下面的代碼

thread.start_new_thread(self.longtask,()) 

該應用程序運行精細第一我添加一些文本(從網絡中檢索)到文本控制,該方法longtask內從一個單獨的線程幾次嘗試(文本被正確添加),但大約3或4次後,它會出現分段錯誤和警告。

(python:3341): Gtk-WARNING **: unable to find signal handler for object(GtkEntry:0x9ed89e0) with func(0x837600) and data(0x9e19c08) 

有誰知道爲什麼會發生這種情況,我該如何解決?我在Ubuntu 10.2上運行Python2.6。

在此先感謝。

回答

2

從不同線程直接調用GUI元素的方法是危險的。沒有太多的代碼,我建議你考慮一個強大的多線程設計。例如,您可以使用Queue對象在線程之間傳遞數據。或者,使用wx的事件。

Here's a nice article關於這個問題。和一個related SO discussion。 Google for more('wxpython thread')

+0

嗨eli,謝謝你的回答。在將所有UI處理代碼放入單獨的方法並使用wx.CallAfter()調用它之後,問題得到解決。 我第一次嘗試使用隊列,但無法讓它工作。使用隊列通過wx.CallAfter()進行通信會有什麼優勢嗎? – jimbo 2010-08-15 09:14:07

+0

@jimbo:IIRC我指出的文章討論並比較了這些選項 – 2010-08-15 09:56:02

+0

是的,但是上述討論並沒有告訴我爲什麼我會選擇另一種選項。 無論如何,你是對的,這對我目前的應用程序來說可能並不重要。 – jimbo 2010-08-15 11:50:32