我刚刚开始学习tkinter,我在这里缺少一些基本的东西。当我尝试除了创建一个空白窗口之外什么都不做的时候,我得到了混合结果。这是代码:
from tkinter import *
from tkinter import ttk
root = Tk()
如果我在python shell中运行它会完美运行(就像在IDLE编辑器中点击F5一样)并弹出一个小空白窗口并保持打开直到我关闭它。
但如果我只是双击.pyw文件,则根本没有任何反应。如果我将其保存为.py。
,则相同如果我将其保存为.py 并将input()
添加到结尾,则会弹出一个小空白窗口并保持打开状态。将其添加到.pyw无效;仍然没有任何反应由于.pyw隐藏了控制台,因此具有部分意义。
但我在这里做错了什么?如何制作一个只显示一个空白窗口并且不显示控制台的.pyw我该怎么办?
答案 0 :(得分:7)
问题不在于文件类型,因为您会很高兴知道。保存为.pyw
只意味着控制台在运行文件时不会显示(没有附加任何字符串,代码运行完全相同) - 并且无论代码是什么都没有例外。
您需要做的是将其添加到代码的末尾(这对于所有tkinter
程序都是必需的):
root.mainloop() # this will launch the window
在我们进入tkinter
事件循环之前,窗口才会出现,程序将保持在事件循环中,直到我们关闭窗口。
事件循环不仅处理来自用户的事件(例如鼠标点击和按键)或窗口系统(例如重绘事件和窗口配置消息),还处理由tkinter
排队的操作本身。这些操作包括几何管理(按.pack()
方法排队)和显示更新。这也意味着在您输入mainloop()
之前不会显示应用程序窗口。
我认为你不需要在IDLE中调用mainloop()
的原因是因为IDLE本身是一个tkinter
程序,它已经有一个事件循环。因此,您在shell中键入的tkinter
代码可能会绑定到IDLE的事件循环。