首页 > 解决方案 > 仅在满足特定条件后如何从函数返回

问题描述

只有当用户在入口小部件中输入输入到调用它的函数时,我如何才能从函数“提示”返回。

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”条件。

或者还有其他方法可以实现这一目标吗?

标签: pythonpython-3.xuser-inputtkinter-entry

解决方案


正如评论中提到的

Tkinter.Widget.wait_window 方法

我希望仅在用户输入输入并将用户输入的值返回给调用者函数后才销毁小部件“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执行。


推荐阅读