2014-02-22 61 views
2

我刚刚开始学习tkinter,我在这里错过了一些基本的东西。当我试图做什么,但创建一个空白窗口,我得到混合结果。下面的代码:.pyw tk程序立即关闭?

from tkinter import * 
from tkinter import ttk 

root = Tk() 

而发生的事情是,如果我在Python运行壳它完美的作品(如只需按在IDLE编辑器F5)和一点点空白的窗口弹出并保持打开状态,直到我关闭它。

但是,如果我只是双击.pyw文件,什么都没有发生。如果我将它另存为.py,也是如此。

如果我将它保存为.py input()添加到最后,然后弹出小空白窗口并保持打开状态。将它添加到.pyw中没有任何作用;仍然没有发生。因为.pyw隐藏了控制台,所以这是有部分意义的。

但我在这里做错了什么?我需要做些什么才能制作一个.pyw文件,它只是显示一个空白窗口并且不显示控制台?

回答

7

问题不是文件类型,因为您会很高兴知道。保存为.pyw只是表示当文件运行时控制台不会显示(不附加任何字符串,代码运行完全相同) - 并且无论代码如何,都不会有例外。

你需要做的是将它添加到你的代码的结束(这是必要的所有tkinter程序):

root.mainloop() # this will launch the window 

窗口将不会出现,直到我们进入了tkinter事件循环程序将保持在事件循环中,直到关闭窗口。

事件循环并不只处理来自用户的事件(例如鼠标点击和键按压),或窗口系统(例如,重绘事件和窗口配置消息),它也处理由tkinter本身排队的操作。这些操作包括几何管理(通过.pack()方法排队)并显示更新。这也意味着在输入mainloop()之前应用程序窗口不会出现。

我认为你不需要在IDLE中调用mainloop()的原因是因为IDLE本身是一个tkinter程序,它已经有一个事件循环。因此,您在shell中输入的tkinter代码可能会被绑定到IDLE的事件循环。

+0

真正完整的答案,最后一段成功了。 – Aerovistae