即使没有选择 Radiobutton 也不会显示错误消息 - 我的代码有什么问题?

No error message shows up even if no Radiobutton is selected - what's wrong with my code?

所以我有两个功能:

def Driver_Form():
    canvas.delete("all")
    root.configure(bg="cornflower blue")
    canvas.config(width=root.winfo_screenwidth(), height=root.winfo_screenheight(),
                  bg="sky blue") 
...

myvar1 = StringVar() #IntVar()
Male = Radiobutton(canvas, text = "Male", variable = myvar1, value = 1)
canvas.create_window(734, 265, window = Male, height = 25, width = 70)

Female = Radiobutton(canvas, text="Female", variable=myvar1, value = 2)
canvas.create_window(825, 265, window=Female, height=25, width=90)

Other = Radiobutton(canvas, text="Rather not say", variable=myvar1, value = 3)
canvas.create_window(940, 265, window=Other, height=25, width=120)

Next_button = Button(root, text="Next", anchor=CENTER, command=lambda: check_Driver(FName_Entry, LName_Entry,
                                                                                        day_combobox, month_combobox,
                                                                                        year_combobox, myvar1, Email_Entry, Phone_Entry))
    Next_button.configure(width=10, bg="black", fg="blue", border=10)
    canvas.create_window(920, 450, anchor=NW, window=Next_button)

Next_button 导致另一个功能:

def check_Driver(FName_Entry, LName_Entry, day_combobox, month_combobox, year_combobox,  myvar1, Email_Entry,
                 Phone_Entry, event=None):
...

if myvar1 != 1 or 2 or 3:
    error_blank2 = Message(root, text="Please don't leave any field/s blank", anchor=CENTER, bg="red", width=1000)
    canvas.create_window(600, 450, anchor=NW, window=error_blank2)

我正在尝试确保在单击男性、女性和其他单选按钮的 none 时显示错误消息。但是,我不知道出了什么问题,但它似乎不起作用,即使单击单选按钮的 none 也不会显示错误消息。

你至少有两个大问题。首先,myvar1 永远不会是 1、2 或 3,因为 myvar1 不是整数。它是 StringVar 的一个实例。因此,您需要更改的第一件事是您需要在 if 语句中使用 int(myvar1.get()) 以便比较存储在变量中的值而不是 StringVar 的实例本身。

当你解决这个问题时,你会遇到另一个问题。 if myvar1 != 1 or 2 or 3 并没有按照您的想法行事。它在逻辑上与 if (myvar != 1) or (bool(2)) or (bool(3)) 相同。由于 bool(2) 将始终 return True,因此 if 语句的主体将始终 运行.

如果您想检查 myvar1 不是值 1、2 或 3 之一,您可以通过以下方式之一进行:

if int(myvar1.get()) not in (1, 2, 3):

-或-

value = int(myvar1.get())
if value != 1 and value != 2 and value != 3:

你的条件不对。你写的条件不检查值是1、2还是3,而是检查它是否不是1或者2和3是否是不同于0的数字。

要检查 myvar 是否不是 1、2 或 3,请使用:

if myvar1.get() not in [1, 2, 3]: