Как правильно передать объект из одного класса в другой?
📁 метод, пример, ии
Имеются два класса: MainWindow и SetOfButtons,
первый класс - главный, строящий скелет окна,
а второй класс должен строить кнопки на скелете окна.
Так вот, как можно правильно передать объект окна классу кнопок, чтобы из класса кнопок можно было полностью управлять этим объектом?
Я уже пытался при инициализации класса MainWindow создавать объект класса SetOfButtons и передавать ему объект окна, получалось строить кнопки, но если дело доходило до проверки на нажатия и выполнения какого-либо действия, то всё ломалось.
Помогите пожалуйста. Ниже привожу примерный код двух классов:
# file ProjectPaint.Main from ProjectPaint.Buttons import * import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() if __name__ == '__main__': app = QApplication(sys.argv) exemplar = MainWindow() exemplar.show() sys.exit(app.exec_()) ------------------------------------- # file ProjectPaint.Buttons from PyQt5.QtWidgets import * from PyQt5.QtGui import * class SetOfButtons(QWidget): def __init__(self): super().__init__() def build_main_buttons(self): # этот метод должен строить кнопки pass
Sorry, я не совсем понимаю, что вы хотите сделать. Посмотрите пример ниже, если что-то не так - уточните, что не так.
import sysfrom PyQt5.Qt import *#from ProjectPaint.Buttons import *class SetOfButtons(QWidget): def __init__(self, num, parent=None): super(SetOfButtons, self).__init__(parent) self.num = num self.layout = QHBoxLayout(self) self.build_main_buttons() def build_main_buttons(self): # этот метод должен строить кнопки for i in range(5): btn = QPushButton(f""btn {self.num}.{i}"") btn.clicked.connect(lambda ch, btn=btn: self.on_clicked(btn)) self.layout.addWidget(btn) def on_clicked(self, btn): print(f'btn: {btn.text()}') class MainWindow(QMainWindow): def __init__(self): super().__init__() self.centralWidget=QWidget(self) self.setCentralWidget(self.centralWidget) self.num = 1 buttonAdd = QPushButton(""Add Widget"") buttonAdd.clicked.connect(self.add_widget) self.layout = QVBoxLayout(self.centralWidget) self.layout.addWidget(buttonAdd, alignment=Qt.AlignBottom) def add_widget(self): setOfButtons = SetOfButtons(self.num, self) self.layout.insertWidget(self.layout.count()-1, setOfButtons) self.num += 1 if __name__ == '__main__': app = QApplication(sys.argv) exemplar = MainWindow() exemplar.show() sys.exit(app.exec_()) Войдите чтобы оставить ответ