从网格位置获取 Tkinter Checkbutton 值
Getting Tkinter Checkbutton value from grid position
我无法从网格位置获取 tkinter 复选框按钮的 On/OFF 状态。在这个基本示例中,如果复选框处于打开状态,我想打印文本,但我不断收到错误消息,即复选框对象没有属性获取,尽管当我单击其中一个复选框时,测试函数打印“打开”或“关闭”就好了。
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()
AttributeError: 'Checkbutton' object has no attribute 'get'
即使错误正确,您的代码也一切正常,Checkbutton
没有任何 get()
属性。我认为您正在尝试获取 checkboxVar
的值。但是由于函数之间没有联系,我认为不可能在您的代码中获得 Variable
的实例。
因此,要解决此问题,您可以将所有 checkboxVar 值保存到列表或字典中供以后使用,或者将它们保存到各自的 Checkbuttons.
...
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.var = checkboxVar # SAVE VARIABLE
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)
...
稍后可以从复选按钮的实例中调用,例如 checkbutton.var.get()
。所以这里是你的 save()
函数
的一个小改动
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].var.get():
print(root.grid_slaves(row=row, column=2)[0].get('1.0', 'end-1c'))
我无法从网格位置获取 tkinter 复选框按钮的 On/OFF 状态。在这个基本示例中,如果复选框处于打开状态,我想打印文本,但我不断收到错误消息,即复选框对象没有属性获取,尽管当我单击其中一个复选框时,测试函数打印“打开”或“关闭”就好了。
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()
AttributeError: 'Checkbutton' object has no attribute 'get'
即使错误正确,您的代码也一切正常,Checkbutton
没有任何 get()
属性。我认为您正在尝试获取 checkboxVar
的值。但是由于函数之间没有联系,我认为不可能在您的代码中获得 Variable
的实例。
因此,要解决此问题,您可以将所有 checkboxVar 值保存到列表或字典中供以后使用,或者将它们保存到各自的 Checkbuttons.
...
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.var = checkboxVar # SAVE VARIABLE
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)
...
稍后可以从复选按钮的实例中调用,例如 checkbutton.var.get()
。所以这里是你的 save()
函数
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].var.get():
print(root.grid_slaves(row=row, column=2)[0].get('1.0', 'end-1c'))