如何在 tkinter 中只选择一个单选按钮

Posted

技术标签:

【中文标题】如何在 tkinter 中只选择一个单选按钮【英文标题】:How to select only one Radiobutton in tkinter 【发布时间】:2018-06-17 05:24:53 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我想您想创建一个具有多个值的单选按钮,它只允许一个选择?您最好填充一个数组并运行一个循环来填充单选按钮。也许是这样的?

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

【讨论】:

他们是否使用数组无关紧要。这是一种很好的编程习惯,但是他们想要的东西可以在没有数组的情况下完成,所以你的答案有点误导。【参考方案2】:

您必须将两个单选按钮绑定到同一个变量。 此外,该变量将接收value 关键字参数中指定的值。 我建议您执行以下操作:

option = StringVar()
R1 = Radiobutton(root, text="MALE", value="male", var=option)
R2 = Radiobutton(root, text="FEMALE", value="female", var=option)

您可以通过跟踪option 变量并调用其get 方法来了解当前选择的项目。 例如,下面将在检查相应的RadioButton时打印"male"或@ 987654327。

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。

【讨论】:

我不想打印所选单选按钮的值,但我希望选择一个,如果不应该打印**不允许** 如果选择了一个,应该打印 Welcome dude,但现在的挑战是能够同时选择两个单选按钮,但我只想选择一个。 @NewpyBoi 这是一个概念证明,从这一点开始你可以做任何你想做的事情。只需在您的按钮回调中检查 option 变量的值是否已设置。

以上是关于如何在 tkinter 中只选择一个单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在不单击tkinter python的情况下读取单选按钮值

如何在 Flutter 中只选择一组单选按钮的值?

我如何在我的 html 中只选择 1 个单选按钮

如何编写代码,以便在带有django的模型中只选择一个单选按钮。

Tkinter 单选按钮未正确选择

如何在表单之外制作单选按钮?