python-3.x Tkinter -如何检测主窗口何时调整大小?

9jyewag0  于 2023-03-31  发布在  Python
关注(0)|答案(1)|浏览(269)

在我的软件中,当用户使用鼠标光标来调整主窗口的大小时,消息“窗口调整大小”应该出现在标签小部件中,而不是当用户不这样做时,标签小部件应该是“就绪”。我如何才能达到这种行为?
下面是我的代码,但它的不完整,因为我真的不知道如何写它。有人可以帮助我吗?

import tkinter as tk

class MainWindow:
    def __init__(self):

        self.parent=tk.Tk()
        self.parent.title("TEST")
        self.parent.minsize(350, 300)

        self.label=tk.Label(self.parent, text="Ready")
        self.label.pack()
        
        self.parent.bind("<???>", self.resizing)    # ???
        self.parent.bind("<???>", self.no_resizing) # ???
        
        self.parent.mainloop()
    
    def resizing(self, *args):
        self.label.configure(text="window resizing..")
    def no_resizing(self, *args):
        self.label.configure(text="ready")
    
app=MainWindow()
7vhp5slm

7vhp5slm1#

你可以绑定到<Configure>事件。注意,由于tkinter处理事件的方式,根窗口上的任何绑定都会应用到该窗口的每个子窗口。最好在回调中测试根窗口。
窗口停止调整大小时没有事件。一个简单的解决方案是使用after来安排标签在一个小延迟后的更改。您可以在每次调用回调时重置该作业。
它可能看起来像这样:

import tkinter as tk

class MainWindow:
    def __init__(self):

        self.parent=tk.Tk()
        self.parent.title("TEST")
        self.parent.minsize(350, 300)

        self.label=tk.Label(self.parent, text="Ready")
        self.label.pack()

        self.parent.bind("<Configure>", self.resizing)

        self.parent.mainloop()

    def resizing(self, event):
        if event.widget == self.parent:
            if getattr(self, "_after_id", None):
                self.parent.after_cancel(self._after_id)
            self.label.configure(text="window resizing...")
            self._after_id = self.parent.after(
                100, lambda: self.label.configure(text="ready")
            )

app=MainWindow()

相关问题