0

如果用户在 tkinter askstring 框上单击 OK 而不输入任何内容,我希望弹出一个警告消息框,然后向用户显示另一个 askstring 框。在下面的代码中,我尝试通过递归调用来做到这一点。我看到以下两种行为:

  1. 用户在 askstring 的第一个实例的文本字段中输入数据,单击 OK。该函数返回输入的值。
  2. 用户将 askstring 的第一个实例的文本字段留空,单击 OK,响应警告消息框并在第二个askstring 实例输入数据。该函数返回无。

这里发生了什么?

    import tkinter as tk
    from tkinter import simpledialog
    from tkinter import messagebox

    def entry():
        temp=simpledialog.askstring("","")
        if len(temp) == 0:
            messagebox.showwarning("Oh oh","you gotta enter something here")
            entry()
        else:
            return(temp)

    y = entry()
    print (y)


      
4

1 回答 1

0

感谢 acw1668,我将代码更改为 while 循环而不是递归,现在我得到了想要的结果。这是我的解决方案:

    import tkinter as tk
    from tkinter import simpledialog
    from tkinter import messagebox

        def entry():
            temp=simpledialog.askstring("","")
            while len(temp) == 0:
                messagebox.showwarning("Oh oh","you gotta 
                enter something here")
                temp = simpledialog.askstring("", "")
            else:
                   return temp
        y = entry()

        print (y)
于 2022-02-26T03:23:32.253 回答