0

我正在尝试制作一个程序,当满足条件时,返回开始并等待。但不是等待用户按下按钮,而是继续执行代码。

我正在使用 python 3.7.4 和 Windows 10。我认为出现此问题是因为 tkinter 在这种情况下不等待用户输入,而是继续执行代码。

我的代码:

from tkinter import *
from tkinter.ttk import *

def start():
    print("Start")
    # Removes all widgets without destroying root
    for widget in root.winfo_children():
        widget.destroy()

    button_1 = Button(root, text="Begin", command=begin).pack()
    button_2 = Button(root, text="Do something else", command=something).pack()
    # I want the program to wait here for the user to click a button

def begin():
    print("\nDoing stuff")
    if True:
        start()
    print("This should not be printed")

def something():
    pass

root = Tk()
root.geometry("300x300")
btn1 = Button(root, text = "Start", command = start)
btn1.pack()
root.mainloop()

这输出:

Start

Doing stuff
Start
This should not be printed

我想要这个输出:

Start

Doing stuff
Start

然后等待用户选择一个按钮。

4

1 回答 1

2

如果您希望函数等待用户操作,则需要明确告诉它等待。

Tkinter 为此提供了三个功能。一个是wait_window,它将等待一个窗口被销毁。一个是wait_visibility,它将等待窗口的可见性发生变化。第三个是wait_variable,它等待设置特定的 tkinter 变量。

在 tkinter 等待期间,它能够为其他事件提供服务。

在您的情况下,解决方案可能如下所示:

var = BooleanVar(value=False)
def do_something():
    something()
    var.set(True)
button_2 = Button(root, text="Do something else", command=do_something).pack()

print("waiting...")
root.wait_variable(var)
print("done waiting.")

当您修改代码以包含上述代码段时,您会注意到“等待...”将打印在标准输出上,然后在您单击“执行其他操作”按钮并something返回之前不会打印任何其他内容,允许要修改的变量。

于 2019-10-01T15:09:39.847 回答