python - 仅在满足特定条件后如何从函数返回
问题描述
只有当用户在入口小部件中输入输入到调用它的函数时,我如何才能从函数“提示”返回。
def prompt(to_speak,label_text,prompt):
name = ""
main = Toplevel()
label = Label(main,text = label_text)
label.grid()
var = StringVar()
entry = Entry(main)
entry.focus()
entry.grid()
entry.config(textvariable = var)
def get_input():
print("function call has occured")
global name
name = var.get()
if not input:
speak(prompt)
else:
main.destroy()
button = Button(main,text = "Proceed",fg = "white",bg = "#1287A8",command = get_input)
button.grid()
speak(to_speak)
if name:
return name
main.mainloop()
我已经定义了回调函数“get_input”,以便在按下“继续”按钮后从条目小部件中获取输入。它将检查用户是否输入了输入。如果输入它会破坏顶层,我希望输入返回到调用“提示”的函数,如果用户没有输入输入,它会警告用户。
但是如果用户输入了输入,那么我想将该输入返回给调用“提示”函数的函数。
我尝试使用 if 条件来实现它,但是 if 条件只检查了一次,并且在按下“继续”按钮之前太多了。
每次执行“get_input”函数后是否可以检查“if”条件。
或者还有其他方法可以实现这一目标吗?
解决方案
正如评论中提到的
我希望仅在用户输入输入并将用户输入的值返回给调用者函数后才销毁小部件“main”。wait_window() 正是这样做的。
main.wait_window(main) #in my case the parent widget is main and the widget to be destroyed is also main.
return name
wait_window() 之后的语句将不会执行,直到所需的小部件被销毁。只有在预期的小部件被销毁后, wait_window()
才会执行以下语句。
所以这里主部件在用户输入输入之前不会被销毁,一旦他输入输入,主部件就会被销毁并且wait_window()下面的语句即被return name
执行。
推荐阅读
- sas - Extract the second occurrence of the string in SAS
- python - Keyboard module doesn't work in a tkinter Gui
- c# - 使用 NServiceBus 进行持久性的正确用法是什么?
- excel - CSV 保存文件中的字符
- cplex - Getting the number of branch and bound nodes explored CPLEX
- javascript - Verdaccio crash with Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
- sql-server - 存储过程中的自动递增变量
- jenkins - 在 Jenkinsfile 中标记脚本块
- visual-studio - VS 2019 Controller IAction Add View 脚手架停止工作
- asp.net - ASP.NET JavaScriptSerializer 反序列化不返回结果