2012-12-11 15 views
3

我是一名在wxPython/Python中開發應用程序的新程序員。我收到如下按鈕事件的不一致結果。wxPython按鈕事件在Windows和Linux中顯示不一致的結果

def OnButton1Button(self, event): 

    self.textCtrl9.AppendText(" 1st instance\n") 
    time.sleep(5) 
    self.textCtrl9.AppendText(" 2nd instance\n") 

它應該打印1st instance再經過延時5秒再次打印2nd instance。這在Windows操作系統中工作正常,但在Linux中,按下按鈕5秒鐘後,我同時獲得1st instance & 2nd instance(同時)。

我真的很困惑。有誰可以請建議我一些解決方案。

在此先感謝。

+0

您是否在'sleep()'之前嘗試了'self.textCtrl9.Update()'? – kraymer

+2

'wx.Yield()'在睡眠之前應該讓第一個追加做它的事情。不幸的是,我無法解釋不同的行爲。順便說一句我認爲預期的行爲是,他們都在最後處理(它不是同步的,行動排隊等待MainLoop應用程序處理和睡眠被阻止,從而阻止任何事件得到處理 - 這就是爲什麼應用程序會迴應這種睡眠5)也許wx能夠卸載一些工作到窗口處理它,而你的應用程序被阻止 - 只是一個猜測 – GP89

+0

@ kraymer -self.textCtrl9.Update()不能解決問題.. 。但是wx.Yield()解決了這個問題。謝謝kraymer&GP89 ​​ – Sanjit

回答

1

這應該使用wx.Timer完成。

假設您的主要目標是在5秒後更新GUI,請將第二個AppendText放入函數中,並將其設置爲使用wx.Timer調用。這樣,您的GUI在5秒延遲期間仍然會響應。

在GUI中的事件處理函數中調用time.sleep(),因此在主線程中,會導致頭痛。另一方面,如果你真的希望你的GUI在5秒鐘內沒有響應,你應該明確地做到這一點,比如說在窗口中使用Enable(False),並且在5秒鐘後用一個定時器再次調用Enable(True) 。這樣,將向用戶指示該GUI不活動。

相關問題