【问题标题】:How to pause Python while Tkinter window is open?如何在 Tkinter 窗口打开时暂停 Python?
【发布时间】:2010-10-15 00:14:36
【问题描述】:

我正在编写一个有时会遇到错误的程序。当它这样做时,它会弹出一个 Tkinter 对话框,询问用户是否继续。这是一个更复杂的版本:

keep_going = False
KeepGoingPrompt(keep_going)
if not keep_going:
    return

提示将keep_going 设置为True 或将其保留为False。 问题是,代码似乎在KeepGoingPrompt 打开时继续。我尝试存储对prompt 的引用并添加一个循环,如

while prompt:
    time.sleep(1)

但是 python 卡在循环中并冻结。 有没有更好的方法?

谢谢

【问题讨论】:

    标签: python loops tkinter pausing-execution


    【解决方案1】:

    您可以使用 tkMessageBox 类弹出一个模式问题对话框,并且在用户单击按钮之前不会返回。详情请见the Tkinter book

    【讨论】:

    • 我试过了,但不能确定它是否有效,因为它似乎引起了一些其他奇怪的错误。但这可能只是我的代码中的其他地方出错了。 :(
    • 你能描述这些错误吗?它可能会提示它们是否与对话调用有关;因为 tkMessageBox 本质上是 Windows MessageBox API 调用的一个非常简单的包装器,所以我认为这不太可能是调用本身的问题。
    • 好吧,修复了我遇到的错误。但现在有一个新的(可能更简单?)一个:消息框只是被跳过,与我原来的对话框相同。
    • OK,按回车提交评论。很高兴知道。不管怎样,我修好了。我没有存储 tkMessageBox() 的结果,而是使用了“if not tkmessageBox(): return”,这似乎有效。谢谢!
    【解决方案2】:

    1) 您是否在 IDLE 中运行您的代码?它可能负责使对话不阻塞,而实际上应该阻塞。

    2) 如果在 IDLE 之外运行没有帮助,请查找指定行为是阻塞还是非阻塞的 tkinter/dialogue 选项

    【讨论】:

    • 不是空闲的,但我在一个实验程序中运行,其中有一种非标准的 python 解释器。那里很容易有一些古怪的东西。 :)
    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 2015-09-13
    • 2016-03-06
    • 1970-01-01
    • 2018-05-18
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多