python - .pyw tk 程序立即关闭?

标签 python python-3.x tkinter tk-toolkit

我刚刚开始学习 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/

相关文章:

python - 使用 python-xlib 禁用操作、移动、调整大小、最小化等

python - 使用 python 创建一个由 2 种颜色的框组成的图像

python - Pygame碰撞检测问题

python - 修改包装函数中的函数代码

python-3.x - 在 python 中创建子图 plotly

python - 如何使用openpyxl删除Excel中的第一行

python - 按钮颜色在功能中不改变 (Python tkinter)

python - Tkinter 在 Frames 中添加菜单栏

python - 使用 openpyxl 加载工作表并忽略包含数据透视表的其他工作表

python - 在 Python 打印语句中访问列表的名称