Python Tkinter-仅标记一个复选框
以下代码允许用户仅选择一个单选按钮。例如,如果用户选择Type II按钮,然后单击Type III按钮,则先前的选择将消失Python Tkinter-仅标记一个复选框,python,tkinter,Python,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) Radio
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", variable = radiobutton_variable, value = 2).grid(row = 0, column = 1)
Radiobutton(root, text="Type IV", variable = radiobutton_variable, value = 3).grid(row = 1, column = 0)
Radiobutton(root, text="Type V", variable = radiobutton_variable, value = 4).grid(row = 1, column = 1)
mainloop()
如果我对check button小部件使用相同的代码,我会收到错误消息:
TclError: unknown option "-value"
有人知道如何解决这个问题吗?复选按钮和单选按钮有不同的选项,因为它们做不同的事情
检查按钮
实例不支持值
选项。相反,它有一个onvalue
和offvalue
选项,指定小部件打开或关闭时的值<代码>检查按钮小部件也需要有自己独特的变量
如果您想限制用户,使他们只能从多个值中选择一个值,那么使用
检查按钮是错误的小部件。这正是单选按钮的作用。单选按钮用于独占选择,复选按钮用于多选。您描述的行为通常适用于单选按钮<代码>复选框
设计为以完全不同的方式工作。多个单选按钮
链接到同一变量,并根据其值显示为活动或禁用。每个Checkbutton
都链接到一个单独的变量,并且有一个用于选中和未选中的值(onvalue
、offvalue
和tristatevalue
args)
我想您正试图创建几个具有上述常见行为的检查按钮。在这种情况下,您需要为每个Checkbutton
创建一个单独的变量,并将value
参数替换为onvalue
和offvalue
(或者根本不指定值;在这种情况下onvalue
默认为1,而offvalue
为0(对于IntVar()
)、“1”和“0”对于StringVar()
和Variable()
,对于BooleanVar()
)为True和False
以下是一个例子:
import tkinter as tk
root = tk.Tk()
var1, var2, var3, var4 = tk.IntVar(), 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,具体取决于是否选择了相应的复选按钮
或者,如果您想强制几个复选框像单选按钮一样工作
。在这种情况下使用它是错误的小部件(最终用户会感到困惑),但从技术上讲这是可能的。要实现这一点,您需要将所有复选框链接到同一个变量
以下是一个示例(基于):
在这里,var
如果未选中复选框,则等于0;如果选中复选框,则等于1-5,具体取决于选择的复选框
附言:使用tkinter import*
中的是个坏主意,用作为tk导入tkinter
。否则,您可能会混淆所有内容,特别是如果您将tkinter.ttk
与tkinter
一起使用,如果您希望用户只选择一个复选框,则可以使用checkbutton。通过运行此代码并选择该选项,您将了解这一点。
我知道其他人已经回答了你的问题。但也许我的回答可以帮助别人
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, text="Radiobutton only one", variable = radiobutton_variable, 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, text="Checkbutton only one", variable = checkbutton_variable, 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, column = 0)
Radiobutton(root, text="radiobutton both", variable = both_select_radiobutton_variable).grid(row = 2, column = 1)
#Same variable, 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 = 0)
Checkbutton(root, text="Checkbutton both", variable = both_select_checkbutton_variable).grid(row = 3, column = 1)
mainloop()
单选按钮和复选框的工作方式不同。在Radiobutton中,一组按钮与一个变量相互链接,该值决定哪个按钮应显示为活动。在复选框中,每个复选框都有一个自己的变量和一个用于选中的值以及一个用于未选中的值。它们的参数不同,工作方式也不同。Checkbutton
使用onvalue
和offvalue
。
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, text="Radiobutton only one", variable = radiobutton_variable, 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, text="Checkbutton only one", variable = checkbutton_variable, 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, column = 0)
Radiobutton(root, text="radiobutton both", variable = both_select_radiobutton_variable).grid(row = 2, column = 1)
#Same variable, 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 = 0)
Checkbutton(root, text="Checkbutton both", variable = both_select_checkbutton_variable).grid(row = 3, column = 1)
mainloop()