如何在 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的情况下读取单选按钮值