如何 return 仅在满足特定条件后才从函数返回
How to return back from a function only after certain condition is satisfied
我如何return 从函数 "prompt" 返回,只有当用户在入口小部件中输入输入到调用它的函数后。
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" 以在按下 "proceed" 按钮后从条目小部件获取输入。它将检查用户是否输入了输入。如果输入它会破坏 Toplevel,我希望输入 returned 到调用 "prompt" 的函数,如果用户没有输入输入,它会警告用户。
但是如果用户输入了输入,那么我想 return 那个输入到调用了 "prompt" 函数的函数。
我尝试使用 if 条件来实现它,但是 if 条件只检查一次,而且在按下 "Proceed" 按钮之前检查了太多次。
是否可以在"get_input"函数执行后每次检查"if"条件。
或者还有其他方法可以实现吗?
如评论中所述
Tkinter.Widget.wait_window-method
我希望小部件 "main" 仅在用户输入输入并且 return 用户输入调用函数的值后销毁。 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() 之后的语句将不会执行,直到所需的小部件 destroyed.Only 在预期的小部件被销毁后,将执行 wait_window()
之后的语句。
所以这里的主控件在用户输入之前不会被销毁,一旦他输入,主控件就会被销毁,下面的语句 wait_window() 即 return name
得到已执行。
我如何return 从函数 "prompt" 返回,只有当用户在入口小部件中输入输入到调用它的函数后。
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" 以在按下 "proceed" 按钮后从条目小部件获取输入。它将检查用户是否输入了输入。如果输入它会破坏 Toplevel,我希望输入 returned 到调用 "prompt" 的函数,如果用户没有输入输入,它会警告用户。
但是如果用户输入了输入,那么我想 return 那个输入到调用了 "prompt" 函数的函数。
我尝试使用 if 条件来实现它,但是 if 条件只检查一次,而且在按下 "Proceed" 按钮之前检查了太多次。
是否可以在"get_input"函数执行后每次检查"if"条件。
或者还有其他方法可以实现吗?
如评论中所述
Tkinter.Widget.wait_window-method
我希望小部件 "main" 仅在用户输入输入并且 return 用户输入调用函数的值后销毁。 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() 之后的语句将不会执行,直到所需的小部件 destroyed.Only 在预期的小部件被销毁后,将执行 wait_window()
之后的语句。
所以这里的主控件在用户输入之前不会被销毁,一旦他输入,主控件就会被销毁,下面的语句 wait_window() 即 return name
得到已执行。