我正在開發的程式使用執行緒來處理長時間運行的行程。我希望能夠使用 Gauge Pulse 向用戶展示,當一個長時間運行的執行緒正在進行時,實際上正在發生一些事情。否則在處理大檔案時很長一段時間內視覺上什么都不會發生,用戶可能會認為程式什么也沒做。
我在程式的狀態欄中放置了一個量規。我的問題是這個。我在嘗試呼叫儀表脈沖時遇到問題,無論我將代碼放在哪里,它要么運行得很快然后停止,要么以正確的速度運行幾秒鐘然后停止。
我嘗試將下面的一行代碼放入執行緒本身。我還嘗試從長時間運行的行程執行緒中創建另一個執行緒來呼叫下面的代碼。我仍然遇到同樣的問題。
我不認為我可以使用 wx.CallAfter ,因為這會破壞這一點。Pulse 需要在行程運行時呼叫,而不是事后呼叫。還嘗試了使用 time.sleep(2) 這也不好,因為它減慢了行程,這是我想避免的。即使使用 time.sleep(2) 我仍然遇到同樣的問題。
任何幫助將不勝感激!
progress_bar.Pulse()
uj5u.com熱心網友回復:
在長時間運行的程序中,您需要找到某種方式從您的執行緒向主 GUI 發送更新請求。例如,如果您正在使用執行緒下載一個非常大的檔案,您將分塊下載它,并且在每個塊完成后,您將向 GUI 發送更新。
如果您正在運行一些實際上不允許使用塊的東西,例如使用 fop 創建一個大型 PDF,那么我想您可以使用 wx.Timer() 來告訴儀表每隔一段時間脈沖一次。然后當執行緒完成時,它會發送一條訊息來停止計時器物件更新儀表。
前者最適合顯示進度,而后者適用于您只想向用戶展示您的應用正在做某事的情況。也可以看看
- http://wiki.wxpython.org/LongRunningTasks
- http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
- http://www.blog.pythonlibrary.org/2013/09/04/wxpython-how-to-update-a-progress-bar-from-a-thread/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/531312.html
上一篇:你能切換一個脈沖影片嗎?
下一篇:Java中的脈沖影像按鈕
