簡體   English   中英

為什么 update_idletasks() 會干擾 overrideredirect() 功能?

[英]Why does update_idletasks() interfere with overrideredirect() functionality?

我有一個頂級窗口,它的具體位置是通過幾何字符串設置的。 w.overrideredirect(True)被調用是因為頂級窗口不能有任何窗口管理器裝飾。 官方文檔指出:

在設置此標志之前,請務必調用 .update_idletasks() 方法(請參閱第 26 節“通用小部件方法”(第 97 頁))。

所以這正是我所做的,但現在出現了窗口管理器裝飾。 如果我不調用w.update_idletasks()它工作正常。

代碼:

w = tk.Toplevel(self.parent_frame)
w.geometry('48x240+1567+209')
w.update_idletasks()
w.overrideredirect(True)

我在 Ubuntu 20.04.3 LTS 上使用 Python 3.8.10 和 Tk 版本 8.6.10。

那不是官方文檔,而且是錯誤的。 恰恰相反:您必須tkinter 有機會在屏幕上繪制窗口之前設置標志。 這意味着在mainloop啟動之前,以及對updateupdate_idletasks任何調用之前。

原因很簡單:設置overrideredirect只是設置一個標志。 渲染窗口時,tkinter 將查看是否設置了標志,然后繪制窗口。 如果未設置標志,則會向窗口添加邊框。

在繪制窗口之后設置標志將不起作用,因為邊框已經繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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