【问题标题】:How to select only one Radiobutton in tkinter如何在 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()

【问题讨论】:

    标签: python tkinter radio-button


    【解决方案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 变量的值是否已设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2015-08-30
    相关资源
    最近更新 更多