Tkinter最大化/恢复/调整差异化

时间:2014-06-17 17:41:56

标签: python event-handling tkinter resize

我在Tkinter中知道"<Configure>"事件处理窗口中的大小更改。但是,我需要区分用户何时点击最大化按钮,恢复按钮以及用户何时调整窗口大小(而不是一次调整所有三个)。关于如何做到这一点的任何想法?有标准的方法吗?例如,当用户达到最大化时,我想执行我的代码以最大化。当用户点击恢复时,我想执行不同的代码来恢复。当用户拖动调整大小(或使用键盘快捷键执行此操作)时,我希望它完全执行不同的代码。

1 个答案:

答案 0 :(得分:1)

我无法想到跟踪这些事件的内置方法,但您可以在根窗口上使用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()和{ {1}},如果没有发生任何变化,您就知道窗口只是重新定位。

希望有所帮助。