Tkinter 最大化/还原/调整大小区分
我知道在Tkinter中,"<Configure>"
事件是用来处理窗口大小变化的。不过,我想区分一下用户点击最大化按钮、恢复按钮和用户手动调整窗口大小这三种情况,而不是把它们混在一起。有没有什么好的办法?有没有标准的做法?比如,当用户点击最大化时,我想执行我的代码来实现最大化;当用户点击恢复时,我想执行不同的代码来恢复窗口;而当用户拖动窗口边缘来调整大小(或者用快捷键调整大小)时,我想执行完全不同的代码。
1 个回答
4
我想不出有什么内置的方法可以追踪这些事件,但你可以使用state()
这个方法来监控你的主窗口状态的变化。你可以查看state()
返回的值,特别是normal
和zoomed
(这看起来只适用于Windows和OSX),然后根据这些值调用你自己的方法来处理窗口的调整大小。下面是一个例子来说明:
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
# initialize the new_state
self.new_state = 'normal'
self.parent.bind('<Configure>', self._resize_handler)
def _resize_handler(self, event):
self.old_state = self.new_state # assign the old state value
self.new_state = self.parent.state() # get the new state value
if self.new_state == 'zoomed':
print('maximize event')
elif self.new_state == 'normal' and self.old_state == 'zoomed':
print('restore event')
else:
print('dragged resize event')
root = Tk()
App(root).pack()
root.mainloop()
如果你想区分是拖动窗口还是拖动来调整大小,你需要添加一些额外的检查,可能需要在<Configure>
之前记录窗口的大小,然后在之后用winfo_height()
和winfo_width()
获取大小,如果没有变化,你就知道窗口只是被重新定位了。
希望这能帮到你。