.pyw tk程序立即关闭?

时间:2014-02-22 19:44:47

标签: python python-3.x tkinter tk

我刚刚开始学习tkinter,我在这里缺少一些基本的东西。当我尝试除了创建一个空白窗口之外什么都不做的时候,我得到了混合结果。这是代码:

from tkinter import *
from tkinter import ttk

root = Tk()

如果我在python shell中运行它会完美运行(就像在IDLE编辑器中点击F5一样)并弹出一个小空白窗口并保持打开直到我关闭它。

但如果我只是双击.pyw文件,则根本没有任何反应。如果我将其保存为.py。

,则相同

如果我将其保存为.py input()添加到结尾,则会弹出一个小空白窗口并保持打开状态。将其添加到.pyw无效;仍然没有任何反应由于.pyw隐藏了控制台,因此具有部分意义。

但我在这里做错了什么?如何制作一个只显示一个空白窗口并且不显示控制台的.pyw我该怎么办?

1 个答案:

答案 0 :(得分:7)

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

您需要做的是将其添加到代码的末尾(这对于所有tkinter程序都是必需的):

root.mainloop()  # this will launch the window

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

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

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