【问题标题】:Using two individual check buttons in tkinter with the same value在 tkinter 中使用两个具有相同值的单独检查按钮
【发布时间】:2015-06-30 16:48:00
【问题描述】:

在这段代码中,我尝试使用这两个检查按钮,它们应该是活动/非活动的,完全相互独立,但它不能按预期工作:

from tkinter import * 

root = Tk()

enable = {'jack': 0, 'john': 0}

def actright(x):
    print(enable.get(x))

for machine in enable:
    l = Checkbutton(root, text=machine, variable=enable[machine], onvalue=1, offvalue=0,
                    command = lambda: actright(machine))
    l.pack(anchor = W)

root.mainloop()

当检查“Jack”或“John”时,它们都同时激活/取消激活。我认为这是因为它们以相同的值启动,但有没有办法让它们独立,但仍然都以“0”启动?

除了我的主要问题,我确实有一个子主题:无论检查多少次按钮,它们仍然返回“0”,但是“onvalue”设置为 1 用于检查按钮,所以它们不应该交替在返回 1 和 0 之间?

【问题讨论】:

    标签: python user-interface python-3.x tkinter


    【解决方案1】:

    你需要一个包含IntVars(甚至是checkButtons)的字典。 然后你需要通常的lambda machine=machine(在循环中初始化小部件时的经典问题)。 所以结果会是这样的:

    from tkinter import * 
    
    root = Tk()
    
    enable = {'jack': 0, 'john': 0}
    checkvalues = {}
    
    def actright(x):
        print(x,  checkvalues[x].get())
    
    for machine in enable:
        myvar = IntVar()
        myvar.set(enable[machine])
        checkvalues[machine] =myvar
        l = Checkbutton(root, text=machine, onvalue=1, offvalue=0, variable = myvar, 
                        command = lambda machine=machine: actright(machine))
        l.pack(anchor = W)
    
    root.mainloop()
    

    【讨论】:

    • 我想你完全回答了我的问题,谢谢你的帮助!
    【解决方案2】:

    添加到 Eric Levieil 的出色答案;如果您只想打印二进制文件,请务必定义 actright() 而不打印 x,否则您最终会在与值关联的字典中打印名称。

    def actright(x):
        print(checkvalues[x].get())
    

    (注意:还没有足够的声誉来发表评论)

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      相关资源
      最近更新 更多