К сожалению, OP утверждал, что
проблема в том, что центральный виджет не отображается в QMainWindow даже после использования функции setCentralWidget.
без подробного описания.
Я внимательно посмотрел на исходный код и пришел к выводу, что
- виджетов были добавлены в макет
- макет установлен на виджет
- виджет был установлен на
QMainWindow
.
Пока все в порядке.
Затем я скопировал полный исходный код OP в свой локальный ящик.
Чтобы заставить его работать, мне пришлось добавить / изменить множество вещей:
Весь импорт Qt отсутствовал. Я добавил
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
Для sys.argv
(в app = QApplication(sys.argv)
) также требуется import sys
.
Виджеты Board
и Clock
отсутствовали.
#board = Board()
#clock = Clock()
clock = QLabel('Clock')
#board.setStyleSheet('background-color: pink')
test = QLabel('test')
не был добавлен в макет сетки.
grid.addWidget(test, 2, 1, 10, 10)
После исправления всего этого (измененный) источник был следующим:
#!/usr/bin/python3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainGrid(QWidget):
def __init__(self):
super().__init__()
self.initGrid()
def initGrid(self):
grid= QGridLayout()
test = QLabel('test')
#board = Board()
#clock = Clock()
clock = QLabel('Clock')
#board.setStyleSheet('background-color: pink')
test.setStyleSheet('background-color: pink')
clock.setStyleSheet('background-color: blue')
grid.addWidget(test, 2, 1, 10, 10)
grid.addWidget(clock, 13, 4, 3, 3)
self.setLayout(grid)
class MainWin(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
centralGrid = MainGrid()
centralGrid.setStyleSheet('background-color: red')
centralGrid.sizeHint()
self.setCentralWidget(centralGrid)
self.setGeometry(200, 100, 1000, 600)
self.setWindowTitle('Simple Checkers')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
gui = MainWin()
sys.exit(app.exec_())
Примечание:
Я добавил "хижину" в первой строке
#!/usr/bin/python3
для моего удобства.
Затем я запустил его в cygwin64 (потому что у меня было только Windows 10 с cygwin под рукой):
$ chmod a+x testQMainWindowCentralWidget.py
$ ./testQMainWindowCentralWidget.py
и получил:
Теперь QMainWindow.setCentralWidget()
работает как положено.
Я не знаю, с какими проблемами на самом деле столкнулся OP.
Я не уверен, был ли открытый код OP точной копией / вставкой, а недостающие детали были фактическим источником проблем OP .
Когда я попытался запустить его, я внимательно рассмотрел трассировку, полученную при первых попытках, и f исправлял ошибки шаг за шагом, соответственно, пока не получил результат выше.