无法动态访问 ttk.RadioButton 的“.variable”属性(python3)

问题描述 投票:0回答:1

我对 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() 成功,但“失败”方法的所有目的是动态访问它们。

我会非常沮丧,因为这个错误困扰了我好几天。我做错了什么?

感谢您的阅读。

python-3.x tkinter
1个回答
0
投票

这个问题的答案是替换命令:

widget.variable.get()

这个:

widget.getvar(widget.cget("variable"))

感谢杰森哈珀。

© www.soinside.com 2019 - 2024. All rights reserved.