Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter-仅标记一个复选框_Python_Tkinter - Fatal编程技术网

Python Tkinter-仅标记一个复选框

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

以下代码允许用户仅选择一个单选按钮。例如,如果用户选择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", 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()