Объяснение:
QMainWindow - это специальный виджет с макетом по умолчанию:
, который не позволяет установить другоймакет и четко указывает на сообщение об ошибке, которое получается при выполнении вашего кода в терминале / CMD:
QWidget::setLayout: Attempting to set QLayout "" on Interface "", which already has a layout
Так что, когда макет не установлен, он не обрабатывает положение QLabels, и вы,при переходе в качестве родителя к окну - self
, оба будут установлены в окне в верхнем левом положении.
Решение:
Как Документы ТочкиВы должны создать центральный виджет, который используется в качестве контейнера, а затем установить макет:
def initGUI(self):
self.setGeometry(0,0,200,200)
self.setFixedSize(self.size())
self.setWindowTitle(self.title)
central_widget = QWidget() # <---
self.setCentralWidget(central_widget) # <---
label1 = QLabel('test 1')
label2 = QLabel('test 2')
self.mainLayout.addWidget(label1)
self.mainLayout.addWidget(label2)
central_widget.setLayout(self.mainLayout) # <---
self.show()