仅在满足特定条件后如何从函数返回

时间:2019-05-11 18:22:40

标签: python python-3.x user-input tkinter-entry

仅当用户将输入小部件中的输入输入到调用它的函数中时,才如何从“提示”函数返回。

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条件来实现它,但是如果条件只被检查了一次,并且在按下“继续”按钮之前太多了。

是否可以在每次执行“ get_input”功能后检查“ if”条件。

否则还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

如评论中所述

Tkinter.Widget.wait_window-method

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