【问题标题】:.pyw tk program closes instantly?.pyw tk 程序立即关闭?
【发布时间】:2014-02-22 19:44:47
【问题描述】:

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

from tkinter import *
from tkinter import ttk

root = Tk()

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

但如果我只是双击 .pyw 文件,则什么也不会发生。如果我将其保存为 .py,则相同。

如果我将其保存为 .py 并且在末尾添加 input(),那么会弹出小空白窗口并保持打开状态。将其添加到 .pyw 无效;仍然没有任何反应。这是部分意义的,因为 .pyw 隐藏了控制台。

但是我在这里做错了什么?我需要做什么才能制作一个仅显示空白窗口而不显示控制台的 .pyw?

【问题讨论】:

    标签: python python-3.x tkinter tk


    【解决方案1】:

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

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

    root.mainloop()  # this will launch the window
    

    在我们进入 tkinter 事件循环之前,该窗口不会出现,并且程序将停留在事件循环中,直到我们关闭该窗口。

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

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

    【讨论】:

    • 真正完整的答案,最后一段成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2017-09-04
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多