Tkinter'<Configure>'事件阻止窗口小部件正确加载

时间:2019-09-01 10:36:45

标签: python tkinter

我目前正在用Tkinter编写一个小应用程序,每次调整窗口大小以保持框架的纵横比时都需要重新调整框架的大小。

我为此使用了 Configure 事件。但是,使用此事件时,直到我将鼠标悬停在窗口小部件上方,窗口小部件才会显示。

我当然不希望这种行为发生。

在创建所有小部件之前和之后,我都尝试将configure事件绑定到根窗口。没有成功。 此外,在尝试使用sleep方法调用configure事件之前,我尝试过等待。

我还尝试添加一个线程,该线程在几秒钟后执行绑定事件。它确实可以工作,但是当我创建新的小部件时,这些新的小部件未正确加载。我想知道是否有办法解决这个问题。

绑定是在我的应用程序类的init函数中完成的

self.root = tk.Tk()
self.root.bind("<Configure>", self.changeWindowSize)

回调是另一个类函数

def changeWindowSize(self, *args):      
    self.root.update()
    # SOME CALCULATIONS
    # Replace the UI
    self.ui.place_forget()
    self.ui.place(relx=0.25+(0.75 - ui_width)/2, rely=0.05+(0.75 - ui_height)/2, relwidth=ui_width, relheight=ui_height)

编辑: 复制方法如下:


import tkinter as tk

root = tk.Tk()
root.geometry("1100x600")

def callback(event):
    root.update()

root.bind("<Configure>", callback)

for i in range(10):
    btn = tk.Button(root, text="Button " + str(i) )
    btn.place(relx=0.1*i, rely=0, relwidth=0.1, relheight=1)

root.mainloop()

此问题现在很明显。 root.update导致此行为。

0 个答案:

没有答案