Python 从网格位置获取Tkinter Checkbutton值

Python 从网格位置获取Tkinter Checkbutton值,python,python-3.x,tkinter,tk,Python,Python 3.x,Tkinter,Tk,我无法从网格位置获取tkinter复选框按钮的开/关状态。在这个基本示例中,如果复选框处于启用状态,我希望打印文本,但我一直得到这样一个错误,即checkbutton对象没有属性get,尽管当我单击其中一个复选框时,测试函数的打印打开或关闭都很好 import tkinter as tk def gui(root): root.geometry('150x150') root.config(background='snow3') for row in range(5)

我无法从网格位置获取tkinter复选框按钮的开/关状态。在这个基本示例中,如果复选框处于启用状态,我希望打印文本,但我一直得到这样一个错误,即checkbutton对象没有属性get,尽管当我单击其中一个复选框时,测试函数的打印打开或关闭都很好

import tkinter as tk

def gui(root):
    root.geometry('150x150')
    root.config(background='snow3')

    for row in range(5):
        checkboxVar = tk.IntVar()
        checkbox = tk.Checkbutton(root, text='', variable=checkboxVar, command= lambda status=checkboxVar: test(status=status))
        checkbox.select()
        checkbox.grid(row=row, column=1)
        textbox = tk.Text(root, height=1, width=10)
        textbox.grid(row=row, column=2)
    saveBtn = tk.Button(root, text='Save', command=save)
    saveBtn.grid(row=6, column=1)


def save():
    for row in range(5):
        print(root.grid_slaves(row=row, column=2)[0].get('1.0', 'end-1c'))
        if root.grid_slaves(row=row, column=1)[0].get() == 1:
            print(root.grid_slaves(row=row, column=2)[0].get('1.0', 'end-1c'))


def test(status):
    if status.get() == 0:
        print('OFF')
    if status.get() == 1:
        print('ON')

if __name__ == '__main__':
    root = tk.Tk()
    gui(root)
    tk.mainloop()

您的代码做的一切都是正确的,即使错误是正确的,Checkbutton没有任何get属性。我认为您正在尝试获取checkboxVar的值。但由于函数和我之间没有联系,所以我认为不可能在代码中获得变量的实例

因此,要解决这个问题,您可以将所有checkboxVar值保存到列表或字典中,以供以后使用,或者将它们保存到各自的checkbutton中

... 对于范围5中的行: checkboxVar=tk.IntVar checkbox=tk.Checkbuttonroot,text=,variable=checkboxVar,command=lambda status=checkboxVar:teststatus=status 复选框。选择 checkbox.var=checkboxVar保存变量 复选框。gridrow=row,column=1 textbox=tk.Textroot,高度=1,宽度=10 textbox.gridrow=row,column=2 saveBtn=tk.Buttonroot,text='Save',command=Save saveBtn.gridrow=6,column=1 ... 稍后可以从checkbutton的实例调用它,比如checkbutton.var.get。这里是对save函数的一个小改动

def保存: 对于范围5中的行: printroot.grid_slavesrow=row,column=2[0]。获取'1.0','end-1c' 如果root.grid\u slavesrow=row,column=1[0].var.get: printroot.grid_slavesrow=row,column=2[0]。获取'1.0','end-1c'
您的代码做的一切都是正确的,即使错误是正确的,Checkbutton没有任何get属性。我认为您正在尝试获取checkboxVar的值。但由于函数和我之间没有联系,所以我认为不可能在代码中获得变量的实例

因此,要解决这个问题,您可以将所有checkboxVar值保存到列表或字典中,以供以后使用,或者将它们保存到各自的checkbutton中

... 对于范围5中的行: checkboxVar=tk.IntVar checkbox=tk.Checkbuttonroot,text=,variable=checkboxVar,command=lambda status=checkboxVar:teststatus=status 复选框。选择 checkbox.var=checkboxVar保存变量 复选框。gridrow=row,column=1 textbox=tk.Textroot,高度=1,宽度=10 textbox.gridrow=row,column=2 saveBtn=tk.Buttonroot,text='Save',command=Save saveBtn.gridrow=6,column=1 ... 稍后可以从checkbutton的实例调用它,比如checkbutton.var.get。这里是对save函数的一个小改动

def保存: 对于范围5中的行: printroot.grid_slavesrow=row,column=2[0]。获取'1.0','end-1c' 如果root.grid\u slavesrow=row,column=1[0].var.get: printroot.grid_slavesrow=row,column=2[0]。获取'1.0','end-1c'
There error是指它所说的,要获得checkbutton的值,你必须使用,get及其变量。There error是指它所说的,要获得checkbutton的值,你必须使用,get及其变量。非常感谢!这解决了我的问题。你怎么知道或者我将来怎么知道将checkboxVar保存到checkbox.var,然后在以后引用它?为什么在调用网格位置时需要它,而不是在测试函数中?谢谢teststatus有一个不同的故事,您将变量作为参数传递给函数,而在save函数中,您引用的是check按钮。无论哪种方法都可以,就像您也可以将checkboxVar作为参数传递给save函数一样。非常感谢!这解决了我的问题。你怎么知道或者我将来怎么知道将checkboxVar保存到checkbox.var,然后在以后引用它?为什么在调用网格位置时需要它,而不是在测试函数中?谢谢teststatus有一个不同的故事,您将变量作为参数传递给函数,而在save函数中,您引用的是check按钮。这两种方法都可以实现,就像您也可以将checkboxVar作为参数传递给save函数一样。
AttributeError: 'Checkbutton' object has no attribute 'get'