我见过的每一个tkinter教程都声称,必须调用tkinter.mainloop
来绘制要绘制的窗口和要处理的事件,并且即使在hello world程序中它们也总是调用此函数。但是,当我在交互式shell中尝试这些时,无需调用mainloop即可正确绘制窗口。在tkinter中嵌入matplotlib图形的This example会生成一个相对复杂的应用程序,并带有用于在tkinter窗口中平移,缩放和调整图形大小的按钮,并且,如果您移除对mainloop的调用并在交互式shell中运行代码,当然,如果我在交互式shell外运行脚本(在主循环被移除的情况下),程序结束得太快以至于看不到会发生什么,但是如果我添加一个调用input
来保持程序打开一切正常(我正在运行python 3.2.2在linux上)。什么时候需要在Tkinter应用程序中调用mainloop?
那么,mainloop究竟做了什么,以及何时需要调用它?
编辑: 为了澄清,如果我打通GNOME终端输入而不必调用主循环
$python3
>>> import tkinter
>>> root = tkinter.Tk()
一个窗口立即出现,和更复杂的Tkinter功能似乎工作以及(例如,向窗口添加按钮)。在IDLE中,调用mainloop是必要的。我的理解是,除非主循环被调用,否则不应该绘制任何事件,也不应处理任何事件。
对不起,我应该提到:我只是用标准Python壳(未IDLE)在GNOME终端(其显然写入C)。就我所知,除了我自己的代码之外,没有什么东西可以做任何影响tkinter的东西。 – James 2011-12-30 21:38:45
我刚刚在IDLE中尝试过同样的事情,而且我没有得到相同的行为 - 直到我调用mainloop时才会出现窗口。 – James 2011-12-30 21:46:38