Как правильно передать объект PyQt5 из одного класса в другой?
Имеются 2 класса: 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
Ответы (1 шт):
Sorry, я не совсем понимаю, что вы хотите сделать. Посмотрите пример ниже, если что-то не так - уточните, что не так.
import sys
from 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_())
