Я довольно новичок в концепциях ООП. Я затрудняюсь даже сформулировать свой вопрос. Возможно, на этот вопрос уже был дан ответ, но сформулирован по-другому!
У меня есть класс 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, Cube и Sphere. С этих кнопок вызываются функции Create_Capsules().cube() и Create_Capsules().sphere(). В конце этого процесса я хочу иметь возможность запросить переменную класса, чтобы получить список всех созданных капсул.
Я попытался создать объект класса Create_capsule в пользовательском интерфейсе и передать его функциям при нажатии кнопок куба/сферы.
Выдержки из кода пользовательского интерфейса:
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)
При выполнении этого при открытии пользовательского интерфейса создается куб (даже без нажатия кнопки куба в пользовательском интерфейсе). И я получаю это сообщение об ошибке:
addCubeButton.clicked.connect(self.addCubeClicked(user_capsule))
RuntimeError: не удалось подключить сигнал clicked()
Я могу не беспокоиться о подходе с переменным класса и вместо этого возвращать имя капсулы из функций addCubeClicked() и addSphereClicked(), собирать их в пользовательском интерфейсе и добавлять туда список. Но это кажется грязным, поскольку я не хочу загромождать свою функцию пользовательского интерфейса какой-либо другой логикой. Я чувствую, что мне здесь не хватает ключевой концепции ООП.