我的GUI
中有两个单选按钮,但我希望一次只能选择一个,但下面的代码可以同时选择radiobutton
。我尝试了checkbutton
,我也可以选择这两个选项。
from tkinter import *
def content():
if not option1.get() and not option2.get():
print("not allowed, select one dude")
else:
print("welcome dude")
option1.set(False)
option2.set(False)
root = Tk()
root.geometry("400x400")
option1 = BooleanVar(value=False)
R1 = Radiobutton(root, text="MALE", value=1, var=option1)
R1.pack()
option2 = BooleanVar(value=False)
R2 = Radiobutton(root, text="FEMALE", value=2, var=option2)
R2.pack()
b = Button(root, text="print", command=content)
b.pack(side="bottom")
root.mainloop()
答案 0 :(得分:1)
您必须将两个radiobuttons绑定到同一个变量。
此外,变量将接收value
关键字参数中指定的值。
我建议你做以下事情:
option = StringVar()
R1 = Radiobutton(root, text="MALE", value="male", var=option)
R2 = Radiobutton(root, text="FEMALE", value="female", var=option)
您可以通过跟踪option
变量并调用其get
方法来了解当前选择的项目。
例如,每当检查相应的单选按钮时,以下内容都会打印"male"
或"female"
。
def print_var(*_):
print(option.get())
root = Tk()
root.geometry("400x400")
option = StringVar()
R1 = Radiobutton(root, text="MALE", value="male", var=option)
R2 = Radiobutton(root, text="FEMALE", value="female", var=option)
R1.pack()
R2.pack()
option.trace('w', print_var)
root.mainloop()
根据您的要求,一个更完整的例子。 该脚本将显示一个带有两个单选按钮和一个按钮的窗口。 单击该按钮时,将打印一条消息,该消息取决于是否选择了某个选项。
from tkinter import *
def validate():
value = option.get()
if value == "male":
print("Welcome dude")
elif value == "female":
print("Welcome gurl")
else:
print("An option must be selected")
root = Tk()
root.geometry("400x400")
option = StringVar()
R1 = Radiobutton(root, text="MALE", value="male", var=option)
R2 = Radiobutton(root, text="FEMALE", value="female", var=option)
button = Button(root, text="OK", command=validate)
R1.pack()
R2.pack()
button.pack()
root.mainloop()
作为旁注,您永远不应导入带有星号的模块,例如from tkinter import *
。
简而言之,它污染了命名空间。更多关于this post。
答案 1 :(得分:0)
我认为你想创建一个具有多个值的单选按钮,只允许一个选择?你最好填充一个数组并运行一个循环来填充单选按钮。也许是这样的?
from tkinter import *
root = Tk()
root.geometry("400x400")
GENDERS = [
("Male", "M"),
("Female", "F"),
("Other", "O")
]
v = StringVar()
v.set("L") # initialize
for text, gender in GENDERS:
b = Radiobutton(root, text=text,
variable=v, value=gender)
b.pack(anchor=W)
root.mainloop()