如何在tkinter中只选择一个Radiobutton

时间:2018-01-08 08:48:15

标签: python tkinter radio-button

我的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()

2 个答案:

答案 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()