使用字典创建复选框时如何更改 Tkinter 复选框的状态?
How to change states of Tkinter checkboxes when creating checkboxes with dictionary?
我正在制作一个程序,它为用户提供 select 的复选框 select 来源。复选框是通过循环自动创建的。我能够检测到哪些复选框已被勾选,但我以后无法自行更改特定复选框的状态。具体来说,我想在单击按钮后从勾选的复选框中删除所有勾号,但更一般地说,我想知道如何更改单个复选框的状态。这是示例代码:
import tkinter
from tkinter import *
tagsValue = {'Beef': 0, 'Fish': 0, 'Chicken': 0, 'Pork': 0, 'Lamb': 0, 'Egg': 0, 'Ham': 0}
def execute():
my_text.delete('1.0', END)
for tag in tagsValue:
if tagsValue[tag].get() == '1':
my_text.insert(INSERT, ('\n' + tag))
root = Tk()
root.title('User Selection')
root.geometry("300x300")
my_button = Button(root, text ="Submit",command = execute)
my_text = Text(root)
for tag in list(tagsValue):
tagsValue[tag] = Variable()
l = Checkbutton(root,justify=LEFT,width=8, text=tag, variable=tagsValue[tag])
l.deselect()
l.pack()
my_button.pack()
my_text.pack()
root.mainloop()
我曾尝试在 root.mainloop()
之前使用 tagsValue['Ham'] = '0'
和 tagsValue['Ham'] = 0
之类的东西,但这些都不起作用。我知道使用 ['state']
来更改复选框的状态,但是由于我的复选框没有命名,所以我不能使用它。 (我不能单独命名复选框,因为我有很多很多复选框)。那么如何更改复选框的状态?
在 for 循环之后,tagsValue
的所有值都将是 Variable
的实例。因此,您可以使用 tagsValue['Ham'].set('0')
来更改 Ham
.
的复选按钮状态
如果您想使用按钮清除所有刻度,请执行以下操作:
def clear():
for var in tagsValue.values():
var.set('0')
...
clear_button = Button(root, text='Clear', command=clear)
clear_button.pack()
...
正如@Bryan 在评论中所说,一般使用特定的 StringVar
或 IntVar
而不是通用的 Variable
。
我正在制作一个程序,它为用户提供 select 的复选框 select 来源。复选框是通过循环自动创建的。我能够检测到哪些复选框已被勾选,但我以后无法自行更改特定复选框的状态。具体来说,我想在单击按钮后从勾选的复选框中删除所有勾号,但更一般地说,我想知道如何更改单个复选框的状态。这是示例代码:
import tkinter
from tkinter import *
tagsValue = {'Beef': 0, 'Fish': 0, 'Chicken': 0, 'Pork': 0, 'Lamb': 0, 'Egg': 0, 'Ham': 0}
def execute():
my_text.delete('1.0', END)
for tag in tagsValue:
if tagsValue[tag].get() == '1':
my_text.insert(INSERT, ('\n' + tag))
root = Tk()
root.title('User Selection')
root.geometry("300x300")
my_button = Button(root, text ="Submit",command = execute)
my_text = Text(root)
for tag in list(tagsValue):
tagsValue[tag] = Variable()
l = Checkbutton(root,justify=LEFT,width=8, text=tag, variable=tagsValue[tag])
l.deselect()
l.pack()
my_button.pack()
my_text.pack()
root.mainloop()
我曾尝试在 root.mainloop()
之前使用 tagsValue['Ham'] = '0'
和 tagsValue['Ham'] = 0
之类的东西,但这些都不起作用。我知道使用 ['state']
来更改复选框的状态,但是由于我的复选框没有命名,所以我不能使用它。 (我不能单独命名复选框,因为我有很多很多复选框)。那么如何更改复选框的状态?
在 for 循环之后,tagsValue
的所有值都将是 Variable
的实例。因此,您可以使用 tagsValue['Ham'].set('0')
来更改 Ham
.
如果您想使用按钮清除所有刻度,请执行以下操作:
def clear():
for var in tagsValue.values():
var.set('0')
...
clear_button = Button(root, text='Clear', command=clear)
clear_button.pack()
...
正如@Bryan 在评论中所说,一般使用特定的 StringVar
或 IntVar
而不是通用的 Variable
。