python - 从网格位置获取 Tkinter Checkbutton 值
问题描述
我无法从网格位置获取 tkinter 复选框按钮的开/关状态。在这个基本示例中,如果复选框已打开,我想打印文本,但我不断收到 checkbutton 对象没有属性 get 的错误,尽管当我单击其中一个复选框时,测试函数会打印“on”或“关”就好了。
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 的实例中调用,例如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'))
推荐阅读
- amazon-web-services - 如何将根域重定向到 AWS route53 中的子域?
- oracle - 带有 LDAP 的 Oracle JDBC-URL 到 OLE DB 连接字符串 - 如何?
- python - 在类变量python中使用类方法
- react-native-ios - Expo SDK 38 错误:“AR 模块已从 expo 包中删除”,即使没有使用 AR 模块
- javascript - JavaScript 文本未显示
- flutter - Flutter中如何处理单屏60多个TextFormField?
- flutter - Flutter 是否可以在不使用 Cupertino 小部件的情况下在 iOS App Store 上发布我的应用程序?
- phpstorm - 如何在 PHPDoc 中引用方法
- r - 在R中按组提取最小值/最大值
- java - 文件阅读器打印出“?” 而不是文件