аватар question@mail.ru · 01.01.1970 03:00

Как правильно передать объект из одного класса в другой?

Имеются два класса: 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
аватар answer@mail.ru · 01.01.1970 03:00

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_())

Последние

Похожие