【问题标题】:Tkinter maximize/restore/resize differentiationTkinter 最大化/恢复/调整大小差异化
【发布时间】:2014-06-17 17:41:56
【问题描述】:

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

【问题讨论】:

    标签: python event-handling tkinter resize


    【解决方案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()
    

    如果你想区分拖动窗口和拖动调整大小,你必须添加一些额外的检查,可能存储&lt;Configure&gt;之前的大小和之后的大小,winfo_height()winfo_width(),以及如果没有发生变化,您就知道窗口只是重新定位了。

    希望对您有所帮助。

    【讨论】:

    • 有趣。我在我的 Linux 系统上看到的唯一状态是标志性的和正常的。我想知道为什么它们不包括缩放。无论如何,我会接受你的回答,但如果其他人碰巧找到了一种更跨平台的方式(它本身不需要内置),我可能会也可能不会切换。很高兴知道它至少可以在 Windows 和 Mac 上完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多