我对 Python 和 tkinter 都是新手。 您将在下面找到我尝试运行的代码的摘要版本,以动态访问一组 ttk 小部件的变量和值。当我单击提交按钮时,遇到以下错误:
AttributeError: 'Radiobutton' object has no attribute 'variable'
这是代码:
#!/usr/bin/env python3
from tkinter import *
from tkinter import ttk
def fails():
"""
Get the value of radiobutton and return a dictionnary (DYNAMIC)
:return: a dictionnary of named option and his value.
"""
options = {}
for widget in my_frame.winfo_children():
if isinstance(widget, ttk.Radiobutton):
if widget.variable.get() not in [None, ""]:
options[widget.cget("text")] = widget.variable.get()
return options
root = Tk()
# Options Frame
my_frame = ttk.Frame(root)
my_frame.grid(column=0, row=0)
# Choice
my_var = StringVar()
# add RadioButtons
my_radio_button = ttk.Radiobutton(my_frame, variable=my_var, value="some value", text="value 1")
my_radio_button.grid(row=0, column=0)
my_dynamic_button = ttk.Button(my_frame, text="fails", command=fails)
my_dynamic_button.grid(row=1, column = 0)
root.mainloop()
代码的目的是运行密码/解密程序。每个密码方法都带有一个选项列表(每个方法都有自己的一组选项,这些选项被添加到主界面中,例如,polybe 方块可以选择具有垂直或水平字母表,并且此选项被添加到界面作为一组单选按钮)。我不知道运行该方法需要哪些选项,这就是我尝试动态访问它们的原因。
我尝试清理接口代码(一个类)以指出我面临的问题。也许我尝试动态访问变量的方式是错误的,这就是我向您寻求帮助以解决我的问题的原因。
我可以静态访问变量的值,即如果我知道当前正在访问的变量的名称。 my_var.get() 成功,但“失败”方法的所有目的是动态访问它们。
我会非常沮丧,因为这个错误困扰了我好几天。我做错了什么?
感谢您的阅读。
这个问题的答案是替换命令:
widget.variable.get()
这个:
widget.getvar(widget.cget("variable"))
感谢杰森哈珀。