Tkinter 最大化/还原/调整大小区分

1 投票
1 回答
2216 浏览
提问于 2025-04-18 10:06

我知道在Tkinter中,"<Configure>"事件是用来处理窗口大小变化的。不过,我想区分一下用户点击最大化按钮、恢复按钮和用户手动调整窗口大小这三种情况,而不是把它们混在一起。有没有什么好的办法?有没有标准的做法?比如,当用户点击最大化时,我想执行我的代码来实现最大化;当用户点击恢复时,我想执行不同的代码来恢复窗口;而当用户拖动窗口边缘来调整大小(或者用快捷键调整大小)时,我想执行完全不同的代码。

1 个回答

4

我想不出有什么内置的方法可以追踪这些事件,但你可以使用state()这个方法来监控你的主窗口状态的变化。你可以查看state()返回的值,特别是normalzoomed(这看起来只适用于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()获取大小,如果没有变化,你就知道窗口只是被重新定位了。

希望这能帮到你。

撰写回答