如何从字典创建类对象

时间:2019-04-26 08:14:32

标签: python loops class dictionary

想用字典创建类对象

您好,我知道这个问题的提出方式有所不同,但是我对Python还是很陌生,因此在浏览现有问答之后,我仍然确实需要一些帮助。预先感谢。

问题-我正在将qt设计器用于UI。我正在尝试在类中定义大量按钮。

我希望能够使用字典并创建一个循环,循环遍历每个键以根据字典的值生成类对象和定义。

现在这就是我正在做的事,我认为这真的很愚蠢:

class MainWindow(QMainWindow):

    def __init__(self):
    .....
    .....

    def change_name_of_button(self):
        self.apple_label.setText('apple_is_big')
        self.orange_label.setText('orange_is_small')

    def press_button(self):
        self.apple_button.clicked.connect(self.eat_apple)
        self.orange_button.clicked.connect(self.eat_orange)

    def eat_apple(self):
        print('nom nom nom')

#........

那么无论如何我只能拥有一个全局字典,该字典将所有名称/对象存储在键“ apple”下,并且我可以用它来生成类中的所有内容?

我想要这样的东西吗?

dict = {
     'Apple': ['apple_label', 'apple_button', 'eat_apple', 'nom nom nom'],
     'Orange': [ .... ],
     ...
}

def xxxx (self):
    for key, value in dict:
        self.dict[key][1].clicked.connect(self......)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用getattr

d = {
     'apple': {'label' : 'apple_label', 'button_result': 'nom nom nom'},
     'orange': { .... },
     ...
}

def initialize(self, d):
    for name, config in d.items():
        getattr(self, f"{name}_label").setText(config["label"])
        def callback():
            print(config["button_result"])
        getattr(self, f"{name}_button").clicked.connect(callback)

请注意,我对词典做了一些修改,您可以根据需要进行安排。