如何解决Tkinter-仅选中一个复选框
以下代码仅允许用户选择一个单选按钮。例如,如果用户选择Type II按钮,然后单击Type III按钮,则先前的选择将消失。
from tkinter import *
root = Tk()
radiobutton_variable = IntVar()
Radiobutton(root,text="Type II",variable = radiobutton_variable,value = 1).grid(row = 0,column = 0)
Radiobutton(root,text="Type III",value = 2).grid(row = 0,column = 1)
Radiobutton(root,text="Type IV",value = 3).grid(row = 1,text="Type V",value = 4).grid(row = 1,column = 1)
mainloop()
如果对复选按钮小部件使用相同的代码,则会收到错误消息:
TclError: unknown option "-value"
有人知道如何解决此问题吗?
解决方法
您描述的行为是Radiobuttons
的惯常行为。 Checkboxes
旨在以完全不同的方式工作。多个Radiobuttons
链接到同一变量,并根据其值显示为活动或禁用。并且每个Checkbutton
都链接到一个单独的变量,并且具有一个值为checked和unchecked(onvalue
,offvalue
和tristatevalue
args)。
我想您正在尝试创建具有上述通常行为的多个Checkbuttons
。在这种情况下,您需要为每个Checkbutton
创建一个单独的变量,并将value
arg替换为onvalue
和offvalue
(或者根本不指定值) ;在这种情况下,onvalue
的默认值为1,而offvalue
的默认值为0(对于IntVar()
),对于StringVar()
和Variable()
的默认值为“ 1”和“ 0”,为True对于BooleanVar()
为False。
这里是一个例子:
import tkinter as tk
root = tk.Tk()
var1,var2,var3,var4 = tk.IntVar(),tk.IntVar(),tk.IntVar() # a separate variable for every Checkbutton
tk.Checkbutton(root,text="Type II",variable=var1,onvalue=4,offvalue=3).pack()
tk.Checkbutton(root,text="Type III",variable=var2).pack()
tk.Checkbutton(root,text="Type IV",variable=var3).pack()
tk.Checkbutton(root,text="Type V",variable=var4).pack()
root.mainloop()
var1
如果选择了第一个复选按钮,则等于4;否则,将等于3。
其他变量将等于1或0,具体取决于是否选择了对应于核心的检查按钮。
或者,如果您想强制几个Checkboxes
像Radiobuttons
一样工作。在这种情况下使用错误的小部件(最终用户会感到困惑),但是从技术上讲,这是可能的。为此,您需要将所有复选框链接到同一变量。
以下是一个示例(基于this answer):
import tkinter as tk
root = tk.Tk()
var = tk.IntVar()
checkboxes = []
for i in range(5):
checkboxes.append(tk.Checkbutton(root,onvalue=i + 1,variable=var))
checkboxes[i].pack()
root.mainloop()
在此,var
如果未选中任何复选框,则等于0;如果选择了一个,则等于1-5,具体取决于哪个复选框。
P.S .:使用from tkinter import *
,而不是import tkinter as tk
是个坏主意。否则,您可能会混淆所有事情,特别是如果您将tkinter.ttk
与tkinter
一起使用。
检查按钮和单选按钮具有不同的选项,因为它们的作用不同。
Checkbutton
实例不支持value
选项。相反,它具有一个onvalue
和offvalue
选项,用于指定窗口小部件打开或关闭时的值。 Checkbutton
小部件也需要具有自己独特的variable
。
如果要限制用户,以便他们只能从多个值中选择一个,则Checkbutton
是错误的小部件。这正是Radiobutton
的目的。单选按钮是排他性选择,复选按钮是多个选择。
如果您希望用户只选择一个复选框,您可以使用复选按钮。通过运行此代码并选择该选项,您将明白这一点。 我知道其他人已经回答了你的问题。但也许我的回答可以帮助某人。
from tkinter import *
root = Tk()
#Same variable but different values
radiobutton_variable = IntVar()
Radiobutton(root,text="Radiobutton only one",variable = radiobutton_variable,value = 1).grid(row = 0,column = 0)
Radiobutton(root,value = 2).grid(row = 0,column = 1)
#Same variable but different values
checkbutton_variable = IntVar()
Checkbutton(root,text="Checkbutton only one",variable = checkbutton_variable,onvalue = 3).grid(row = 1,column = 0)
Checkbutton(root,onvalue = 4).grid(row = 1,column = 1)
#Same variable,same values or no value
#Select both radio button
both_select_radiobutton_variable = IntVar()
Radiobutton(root,text="radiobutton both",variable = both_select_radiobutton_variable).grid(row = 2,same values or no value
#Select both check button
both_select_checkbutton_variable = IntVar()
Checkbutton(root,text="Checkbutton both",variable = both_select_checkbutton_variable).grid(row = 3,column = 1)
mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。