将动态创建的名称附加到UI类中的类变量

时间:2018-11-25 06:36:20

标签: python pyqt

我对OOP的概念还很陌生。我甚至很难说出我的问题。也许这个问题已经回答了,但是措辞却有所不同!

我有一个名为Create_Capsules()的类。它具有两个功能:

  1. 创建一个多维数据集
  2. 创建一个球体。

我创建了一个类变量,该变量附加了这些新创建的胶囊的名称。

创建胶囊类(伪代码):

class Create_Capsule(object):
    def __init__(self):
        super(Create_Capsule, self).__init__()        
        self.user_capsules = []

    def cube(self):
        #psuedo-code
        cap_name = create_cube(name='capsule_cube01')
        self.user_capsules.append(cap_name)
        return cap_name

    def sphere(self):
        #psuedo-code
        cap_name = create_sphere(name='capsule_sphere01')        
        self.user_capsules.append(cap_name)        
        return cap_name

我还有另一个具有两个简单QPushButtons的UI类,即Cube和Sphere。 从这些按钮调用函数Create_Capsules()。cube()和Create_Capsules()。sphere()。 在此过程结束时,我希望能够查询class变量以获取创建的所有胶囊的列表。

我试图在UI中创建Create_capsule类的对象,并在单击多维数据集/球形按钮时将其传递给函数。

UI代码摘录:

Class toolUI(obj):
    addNewBboxLabel = QLabel("Add New Capsule:")
    user_capsule = Create_Capsule()

    addCubeButton = QPushButton("Cube")
    addCubeButton.clicked.connect(self.addCubeClicked(user_capsule))
    # addCubeButton.clicked.connect(functools.partial(self.addCubeClicked), user_capsule)

    addSphereButton = QPushButton("Sphere")
    addSphereButton.clicked.connect(self.addSphereClicked(user_capsule))
    # addSphereButton.clicked.connect(functools.partial(self.addSphereClicked), user_capsule)

    def addCubeClicked(self, capsule_obj):
        """
        Adds a cube to the scene 
        """               
        user_cube = capsule_obj.cube()   
        print(user_cube)            
        print(capsule_obj.user_capsules)

    def addSphereClicked(self, capsule_obj):
        """
        Adds a sphere to the scene 
        """               
        user_sphere = capsule_obj.sphere()   
        print(user_sphere)             
        print(capsule_obj.user_capsules)

执行此操作时,在打开UI时,将创建一个多维数据集(即使不单击UI中的多维数据集按钮)。而且,我收到此错误消息:

  

addCubeButton.clicked.connect(self.addCubeClicked(user_capsule))

     

RuntimeError:无法连接信号clicked()

我可以选择不理会类变量方法,而从addCubeClicked()和addSphereClicked()函数返回胶囊的名称,将它们收集在UI中并在此添加一个列表。但是,这感觉很脏,因为我不想用任何其他逻辑来弄乱我的UI函数。 我觉得我在这里缺少OOP的关键概念。

1 个答案:

答案 0 :(得分:1)

toolUI类中,应将代码包装在诸如__init__之类的方法中。您可能还想将self.添加到小部件中。

class toolUI(obj):
    def __init__(self):
        self.addNewBboxLabel = QLabel("Add New Capsule:")
        self.user_capsule = Create_Capsule()

        self.addCubeButton = QPushButton("Cube")
        self.addCubeButton.clicked.connect(self.addCubeClicked(self.user_capsule))

        self.addSphereButton = QPushButton("Sphere")
        self.addSphereButton.clicked.connect(self.addSphereClicked(self.user_capsule))

部分原因是您的代码不存在该类的唯一实例,并且self不是定义的变量。将其放在带有self参数的方法中将定义要使用的变量,并且还允许其他方法访问属于该对象的属性(例如self.addCubeButton)。