[英]What's the difference between “update” and “update_idletasks”?
從effbot.org
文檔中,我們有關於update
功能的以下內容:
處理所有掛起事件,調用事件回調,完成任何掛起的幾何管理,根據需要重繪小部件,以及調用所有掛起的空閑任務。 應謹慎使用此方法,因為如果從錯誤的位置(例如,從事件回調中調用,或者從可以以任何方式從事件回調中調用的函數等)調用它,可能會導致非常討厭的競爭條件)。 如有疑問,請改用
update_idletasks
。
另一方面,這是關於update_idletasks
函數:
調用所有待處理的空閑任務,而不處理任何其他事件。 這可用於在必要時執行幾何管理和重繪小部件,而無需調用任何回調。
據我所知,兩者都調用所有掛起的空閑任務 , 完成任何掛起的幾何管理並根據需要重繪小部件 。 我看到的唯一區別是update
處理所有掛起事件並調用事件回調 。 這就是為什么我們不應該在偶數回調中調用update
,我想。
但是,我已經看到了一個接一個地使用update_idletasks
和update
例子 ,我無法理解其中的原因,因為理論上update
執行update_idletasks
所做的一切。
這些待處理事件究竟是什么以及文檔正在討論的空閑任務 ? 有什么區別和關系?
有人回答說,我應該在什么情況下使用update_idletasks
update
? 具體例子也是值得贊賞的。
我看到的唯一區別是更新處理所有掛起事件並調用事件回調。 這就是為什么我們不應該在偶數回調中調用更新,我想。
兩個帳戶都是正確的。
什么是未決事件? after
安排的事件,主要是。 而且,正如您在問題中提到的那樣,觸發重繪的事件。
您應該使用update_idletasks
update
的情況? 幾乎從不。 老實說,我務實的答案是“永遠不要調用update
除非調用update_idletasks
做得不夠”。
要記住的重要一點是update
阻塞,直到處理完所有事件。 實際上,這意味着你有一個mainloop
嵌套在一個內部mainloop
。 在無限循環中有一個無限循環永遠不是一個好主意。
如果你看到一個在另一個之后被調用的例子,你會看到不好的例子。 老實說,完全沒有理由這樣做。 大量的代碼我看到來電update
往往比以往任何時候都應該這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.