为什么Tkinter.Tk()不能立即打开窗口?

时间:2018-11-23 19:30:23

标签: python tkinter

我在python 2.7中使用Tkinter,并且我注意到有时直到启动mainloop方法后,根窗口才打开。 另外,在这些情况下,当关闭窗口时,程序将结束(root.mainloop是代码的最后一行),而在其他情况下则没有发生。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

简短的回答是它正在发生,因为这是它设计成发生的方式。

除了通过事件循环,tkinter中什么也没有发生。甚至与出现的窗口一样简单的事件就是响应事件的事件循环。例如,当您创建窗口(并假设您不撤消窗口)时,实际上会在事件队列中添加一个“自己撤回”事件。当您启动事件循环时,这是它处理的首批事件之一,并显示窗口。

调用mainloop()时,将导致事件循环开始处理事件。它旨在开始处理事件,直到根窗口被破坏后才返回。这就是为什么对mainloop的调用通常是文件中代码的最后一行,因为一旦用户关闭窗口,通常便无事可做。

处理事件的另一种方法是调用updateupdate_idletasksupdate将开始事件循环,并在处理完所有未决事件后返回(即:它不等待窗口被销毁)。 update_idletasks与之类似,但仅更新“空闲”事件:与after安排的事件,与重绘窗口有关的事件以及其他一些事件。它不处理用户生成的事件,例如鼠标和按钮的点击。