繁体   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