簡體   English   中英

“update”和“update_idletasks”之間有什么區別?

[英]What's the difference between “update” and “update_idletasks”?

effbot.org文檔中,我們有關於update功能的以下內容:

處理所有掛起事件,調用事件回調,完成任何掛起的幾何管理,根據需要重繪小部件,以及調用所有掛起的空閑任務。 應謹慎使用此方法,因為如果從錯誤的位置(例如,從事件回調中調用,或者從可以以任何方式從事件回調中調用的函數等)調用它,可能會導致非常討厭的競爭條件)。 如有疑問,請改用update_idletasks

另一方面,這是關於update_idletasks函數:

調用所有待處理的空閑任務,而不處理任何其他事件。 這可用於在必要時執行幾何管理和重繪小部件,而無需調用任何回調。

據我所知,兩者都調用所有掛起的空閑任務完成任何掛起的幾何管理根據需要重繪小部件 我看到的唯一區別是update 處理所有掛起事件調用事件回調 這就是為什么我們不應該在偶數回調中調用update ,我想。

但是,我已經看到了一個接一個地使用update_idletasksupdate 例子 ,我無法理解其中的原因,因為理論上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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM