0
在Arch上使用wxPython 2.8(工作正常,但我認爲它不應該...)和Mac OS X上的wxPython 2.9,都是Python 2.7。我的代碼由根據當前狀態在不同屏幕之間切換組成。在狀態(屏幕)之間的每個開關上,清除我的主Sizer並在主框架上調用DestroyChildren(),然後使用其他組件填充它們。在一個按鈕上清除wxPython框架點擊
所以基本上我認爲我有外部線程試圖改變主線程中的wx組件。我猜這不是wxPython中的最佳實踐,那麼我將如何修改它?
附加事件按鈕
self.login_button.Bind(wx.EVT_BUTTON, self.login_button_click)
日誌事件做的東西,並調用(模型狀態改變了這裏)
def login_button_click(self,event):
...
# CHANGE THE self.model.current_state
...
self.update(None)
更新清除框架的更新,檢查狀態,調用builder方法
def update(self, o):
self.box.Clear() #clear the main sizer
self.frame.DestroyChildren() #delete all children, THIS IS WHERE THE CODE SEGFAULTS
print "STATE: "+self.model.current_state
if self.model.current_state == self.model....
...
elif self.model.current_state == self.model....
...
我試過使用wx.CallAfter,導致我在活動結束時,所有組件都會被拆除,即使是新建的組件也是如此。
我發生的一件奇怪的事是frame.Layout()不工作?爲了讓面板正常顯示,我需要調整框架大小。我在頂層框架上調用Layout()方法。 – Sash 2012-08-10 13:44:27
您可能需要在包含面板的sizer上調用Layout()。 – 2012-08-10 17:25:25
厭倦了self.sizer.Layout()和self.Layout()的組合,結果相同。調用.Layout()強制重新佈局()的所有chidl元素btw?或者我應該嘗試在較低層次上調用佈局? – Sash 2012-08-12 18:14:22