我刚刚开始学习 tkinter,我在这里缺少一些基本知识。当我除了创建一个空白窗口什么都不做时,我得到的结果好坏参半。这是代码:
from tkinter import *
from tkinter import ttk
root = Tk()
发生的情况是,如果我在 python shell 中运行它,它会完美运行(就像在 IDLE 编辑器中简单地按 F5),然后会弹出一个空白的小窗口并保持打开状态,直到我关闭它。
但是如果我简单地双击 .pyw 文件,什么也不会发生。如果我将其另存为 .py,则相同。
如果我将它另存为 .py 并 添加 input()
到末尾,然后会弹出一个空白小窗口并保持打开状态。将其添加到 .pyw 没有任何效果;仍然没有任何反应。这在一定程度上是有道理的,因为 .pyw 隐藏了控制台。
但是我在这里做错了什么?我需要做什么才能制作一个只显示空白窗口而不显示控制台的 .pyw?
最佳答案
问题不在于文件类型,您会很高兴知道这一点。保存为 .pyw
只是意味着当文件运行时控制台不会出现(没有附加字符串,代码运行完全相同) - 无论代码是什么,都没有异常(exception)。
您需要做的是将此添加到代码的末尾(这对所有 tkinter
程序都是必需的):
root.mainloop() # this will launch the window
在我们进入 tkinter
事件循环之前,窗口不会出现,程序将停留在事件循环中,直到我们关闭窗口。
事件循环不仅处理来自用户(例如鼠标点击和按键)或窗口系统(例如重绘事件和窗口配置消息)的事件,它还处理 tkinter< 排队的操作
本身。这些操作包括几何管理(通过 .pack()
方法排队)和显示更新。这也意味着在您进入 mainloop()
之前,应用程序窗口不会出现。
我认为之所以不需要在IDLE中调用mainloop()
是因为IDLE本身就是一个tkinter
程序,它已经有一个事件循环了.因此,您在 shell 中键入的 tkinter
代码可能已绑定(bind)到 IDLE 的事件循环。
关于python - .pyw tk 程序立即关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959542/