首页 > 解决方案 > 获取复选框tkinter值的问题

问题描述

我正在尝试获取 tkinter 中复选框的值,以便我可以将这些复选框中的数据导出到 Excel 电子表格中

我试过让复选框迭代生成(就像它们现在一样)并手动制作它们,但无论我做什么,都无法让它们给我它们的值(无论它们是否被选中),这真的让我感到压力出去。

def check():
    for movie in movies():
        print(button.get())

Button(moviewindow,text="Check",command=check).pack(anchor=S)
for movie in movies():
            var1 = IntVar() 
            button = Checkbutton(moviewindow,
                        bg=moviewindow_bg,
                        font=("Times",23),
                        onvalue=1,
                        offvalue=0,
                        text=movie.replace("<strong>","").replace("</strong>",""),
                        variable=var1).pack(anchor=W)

我希望代码打印 1 或 0,但我无法让复选框返回它们的值。

标签: pythoncheckboxtkinter

解决方案


您需要将变量(可能还有按钮)存储在某处。目前正在发生的事情是这样的:

您创建一个Button运行该功能的check。在内部check,您遍历电影,并尝试从button. 您应该从中获得价值var1,但这不是这里的主要问题。主要问题是var1它只包含最后IntVar创建的,所以循环只会重复你创建的最后一个复选框的值

在不知道对象movie是什么类型的情况下,很难说在这里进行的最佳方式。如果movie是一个类对象,你也许可以改变它的属性。如果它是一个可散列的对象,这就是你可以做的。

在您的代码上方的某处:为电影和变量之间的关联创建一个字典

checkbox_vars = {}

修复check以使用此字典

def check():
    for movie in movies():
        print(checkbox_vars[movie].get())

在您的循环中,将变量存储在 dict

var1 = IntVar()
# Store the variable in checkbox_vars, for this specific movie
checkbox_vars[movie] = var1

这仍然是一种不太优雅的方式,但它应该说明您需要如何在button/var1和您movie自己之间实际创建关联,而不是隐含的。


推荐阅读