.pyw tk程序立即关闭?

tem*_*ame 2 python tk-toolkit tkinter python-3.x

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

from tkinter import *
from tkinter import ttk

root = Tk()
Run Code Online (Sandbox Code Playgroud)

而且如果我在python shell中运行它会完美地运行(比如只需在IDLE编辑器中点击F5)并弹出一个小空白窗口并保持打开直到我关闭它.

但是,如果我只是双击.pyw文件,根本没有任何事情发生.如果我将其保存为.py,则相同.

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

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

Ale*_*ton 7

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

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

root.mainloop()  # this will launch the window
Run Code Online (Sandbox Code Playgroud)

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

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

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