我对OOP的概念还很陌生。我甚至很难说出我的问题。也许这个问题已经回答了,但是措辞却有所不同!
我有一个名为Create_Capsules()的类。它具有两个功能:
我创建了一个类变量,该变量附加了这些新创建的胶囊的名称。
创建胶囊类(伪代码):
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的关键概念。
答案 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
)。