【问题标题】:How to change states of Tkinter checkboxes when creating checkboxes with dictionary?使用字典创建复选框时如何更改 Tkinter 复选框的状态?
【发布时间】:2022-01-02 11:53:27
【问题描述】:

我正在制作一个程序,它为用户提供了一个可供选择的复选框。复选框是通过循环自动创建的。我能够检测到哪些复选框已被勾选,但我以后无法自行更改特定复选框的状态。具体来说,我想在单击按钮后从选中的复选框中删除所有刻度,但更一般地说,我想知道如何更改单个复选框的状态。这是一个示例代码:

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'] 来更改复选框的状态,但是由于我的复选框没有命名,所以我不能使用它。 (我不能单独命名复选框,因为我有很多很多复选框)。那么如何更改复选框的状态呢?

【问题讨论】:

  • variable 需要是一个特殊的 tkinter 变量,例如 StringVarIntVar
  • 喜欢这个? tagsValue[tag] = StringVar() [下一行] l = Checkbutton(root,justify=LEFT,width=8, text=tag, variable=tagsValue[tag]) 在我的复选框创建循环中?

标签: python-3.x tkinter checkbox


【解决方案1】:

在 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 在评论中所说,一般使用特定的StringVarIntVar 而不是通用的Variable

【讨论】:

  • 您的def clear 运行良好,谢谢,但是当我尝试使用tagsValue['Ham'].set('0') 时,它并没有勾选Ham 复选框。我已按照建议将Variable() 更改为IntVar(),因此我将您的线路更改为tagsValue['Ham'].set(0) 并在我的def execute 中进行了其他更改,但它仍然不起作用
  • 通常.set(1) 勾选复选按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2021-03-06
  • 1970-01-01
相关资源
最近更新 更多