Python Tkinter未在函数内等待用户输入

Python Tkinter未在函数内等待用户输入,python,tkinter,Python,Tkinter,我试图制作一个程序,当条件满足时,返回到开始并等待。但它不是等待用户按下按钮,而是继续执行代码 我正在使用python 3.7.4和Windows 10。 我假设出现这个问题是因为tkinter在这种情况下不等待用户输入,而是继续执行代码 我的代码: 从tkinter导入* 从tkinter.ttk导入* def start(): 打印(“开始”) #删除所有小部件而不销毁根 对于root.winfo_children()中的小部件: widget.destroy() button_1=按钮(r

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

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

我的代码:

从tkinter导入*
从tkinter.ttk导入*
def start():
打印(“开始”)
#删除所有小部件而不销毁根
对于root.winfo_children()中的小部件:
widget.destroy()
button_1=按钮(root,text=“Begin”,command=Begin).pack()
button_2=按钮(root,text=“做点别的”,command=something).pack()
#我希望程序在这里等待用户单击按钮
def begin():
打印(“\n正在打印内容”)
如果为真:
开始()
打印(“不应打印此内容”)
定义某物():
通过
root=Tk()
根几何(“300x300”)
btn1=按钮(root,text=“Start”,command=Start)
btn1.pack()
root.mainloop()
这将产生:

Start

Doing stuff
Start
This should not be printed
我希望这个输出:

Start

Doing stuff
Start

然后等待用户选择按钮。

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

Tkinter有三个功能。一个是
wait\u window
,它将等待一个窗口被销毁。一种是
wait\u 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.")

当您修改代码以包含上述代码段时,您会注意到stdout上将打印“waiting…”,然后不会打印任何其他内容,直到您单击“Do something”按钮并返回
something
以允许修改变量

如果希望函数等待用户操作,则需要显式地告诉它等待

Tkinter有三个功能。一个是
wait\u window
,它将等待一个窗口被销毁。一种是
wait\u 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.")
当您修改代码以包含上述代码段时,您会注意到stdout上将打印“waiting…”,然后不会打印任何其他内容,直到您单击“Do something”按钮并返回
something
以允许修改变量