如何在Tkinter中设置-zoomed属性时防止绕过resizable(False, False)
解决Tkinter窗口设置-zoomed后仍可调整大小的问题
在Gnome窗口管理器(X11环境)下,当窗口处于最大化(-zoomed)状态时,Tkinter的resizable(False, False)设置会被窗口管理器忽略——因为最大化状态下WM会接管窗口尺寸的控制逻辑,导致拖动标题栏或快捷键仍能调整窗口大小。
可以通过以下方式解决:
方法:锁定尺寸+限制最小/最大窗口尺寸
先设置窗口不可调整,再最大化,最后将窗口的最小和最大尺寸设置为当前最大化后的尺寸,彻底锁定窗口大小:
import tkinter as tk master = tk.Tk() # 先设置窗口不可调整 master.resizable(False, False) # 等待窗口可见后设置最大化 master.wait_visibility() master.attributes("-zoomed", True) # 更新窗口状态,获取当前最大化后的尺寸 master.update_idletasks() curr_width = master.winfo_width() curr_height = master.winfo_height() # 设置最小/最大尺寸为当前尺寸,彻底锁定 master.minsize(curr_width, curr_height) master.maxsize(curr_width, curr_height) master.title("This window should not be resizable") tk.mainloop()
说明
update_idletasks()用于确保窗口尺寸信息已完成更新,避免获取到初始的小窗口尺寸。- 将
minsize和maxsize设为同一值后,无论窗口管理器如何尝试调整,窗口都无法改变尺寸。 - 该方法在Ubuntu 22.04+Gnome 42.5+X11环境下可直接生效。
内容的提问来源于stack exchange,提问作者Mandlemankiller
相关产品推荐
相关产品推荐

