【问题标题】:How do I create multiple checkboxes from a list in a for loop in python tkinterpython - 如何在python tkinter的for循环中从列表中创建多个复选框
【发布时间】:2023-03-27 13:55:01
【问题描述】:

我有一个可变长度的列表,并想为列表中的每个条目创建一个复选框(使用 python TKinter)(每个条目对应于应该使用复选框打开或关闭的机器 -> 更改中的值词典)。

print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}

(例如,可以是任意长度)

现在是相关代码:

for machine in enable:
    l = Checkbutton(self.root, text=machine, variable=enable[machine])
    l.pack()
self.root.mainloop()

此代码生成 4 个复选框,但它们都被选中或未选中,enable dict 中的值不会改变。怎么解决? (我认为l 不起作用,但是如何使这一个变量?)

【问题讨论】:

    标签: python checkbox for-loop tkinter


    【解决方案1】:

    传递给每个检查按钮的“变量”必须是 Tkinter 变量的实例 - 实际上,它只是传递的值“0”,这会导致错误行为。

    您可以在创建检查按钮的同一 for 循环上创建 Tkinter.Variable 实例 - 只需将代码更改为:

    for machine in enable:
        enable[machine] = Variable()
        l = Checkbutton(self.root, text=machine, variable=enable[machine])
        l.pack()
    
    self.root.mainloop()
    

    然后您可以使用其get 方法检查每个复选框的状态,如 enable["ID1050"].get()

    【讨论】:

    • 谢谢!复选框现在可以工作,只有一个问题:我如何读取 tkinter 类之外的变量(我将其设置为:stackoverflow.com/a/1835036/1102225)。我什么都试过了。当我使用print enable[machine].get() AttributeError: 'int' object has no attribute 'get' 时,我尝试了:print app.enable[machine].get() AttributeError: 'MyTkApp' object has no attribute 'enable'(app 是名为 MyTkApp 的 tkinter 类的对象)当我在没有 get 的情况下执行此操作时:print enable[machine] PY_VAR0
    • 哦,我自己搞定了!我在 tkinter 类中包含了一个函数来返回值:def read(self, machine): return enable[machine].get() 然后在类之外您可以例如调用:print app.read(1050)
    【解决方案2】:

    只是想我会分享一个列表而不是字典的示例:

    from Tkinter import *
    
    root = Tk()    
    
    users = [['Anne', 'password1', ['friend1', 'friend2', 'friend3']], ['Bea', 'password2', ['friend1', 'friend2', 'friend3']], ['Chris', 'password1', ['friend1', 'friend2', 'friend3']]]
    
    for x in range(len(users)):
        l = Checkbutton(root, text=users[x][0], variable=users[x])
        print "l = Checkbutton(root, text=" + str(users[x][0]) + ", variable=" + str(users[x])
        l.pack(anchor = 'w')
    
    root.mainloop()
    

    希望对你有帮助

    【讨论】:

    • 使用 tkinter 并在 python3 中使用 () 打印
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2018-01-01
    • 2021-10-15
    相关资源
    最近更新 更多