Tkinter 窗口事件与属性
我一直在寻找关于Tkinter窗口特性的资料,但没有找到。我的平台是Windows,使用的是Python 2.7。帖子最后有一些代码,可以用来探索Tkinter窗口事件。
如何检测窗口的最小化和最大化事件?当我绑定窗口的
<Configure>
事件时,返回的事件对象并没有包含这些事件的信息。我也查找过一些协议(比如WM_DELETE_WINDOW
),希望能找到相关的事件,但都没有成功。如何确定窗口边框的大小(不是Tkinter的框架,而是操作系统在Tkinter放置控件的容器周围放置的边框)?有没有一种不依赖于平台的方法来发现这些窗口属性,还是说我需要使用像Windows下的win32 API这样的特定平台的解决方案?
如何判断一个窗口是否可见,比如通过
.withdraw()
设置的窗口是否不可见?是否可以取消一个窗口事件,比如如果想把窗口限制在用户桌面的某个位置?从窗口的
<Configure>
事件返回'break'
并不能取消窗口的移动或调整大小事件。
这里有一些示例代码,可以用来实验Tkinter窗口事件。
from __future__ import print_function
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
def onFormEvent(event):
for key in dir(event):
if not key.startswith('_'):
print('%s=%s' % (key, getattr(event, key)))
print()
root = tk.Tk()
root.geometry('150x50')
lblText = tk.Label(root, text='Form event tester')
lblText.pack()
root.bind('<Configure>', onFormEvent)
root.mainloop()
更新:这是我对以下事件的了解:
event.type == 22
(以下之一或多个发生了变化:宽度、高度、x、y)event.type == 18
(最小化)event.widget.winfo_viewable() = 0
(不可见)event.type == 19
(从最小化恢复)event.type == 2
(最大化)event.type == 22
(由于宽度和高度的变化,从最大化恢复)
1 个回答
3
要判断一个窗口是否可见,可以使用 .winfo_viewable()
这个方法。如果窗口可见,它会返回 1
,如果不可见,则返回 0
。
如果你想让窗口不能被调整大小,先把窗口设置成你想要的样子,然后在你的 __init__
方法的最后加上
self.root.minsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())
self.root.maxsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())
。
如果你想完全禁止移动窗口,最简单的方法就是去掉窗口的标题栏和边框,可以用 self.root.overrideredirect(True)
这个命令。