我希望有一个具有包含多个其他小部件的网格布局的中央Widget。
问题是,即使在使用了QMainWindow函数之后,中心小部件也没有在setCentralWidget上显示。
下面是不起作用的代码,我找不到错误(编辑:没有引发异常,只是没有看到小部件)
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QGridLayout
class Board(QWidget):
def __init__(self):
super().__init__()
Clock(QWidget):
def __init__(self):
super().__init__()
class MainGrid(QWidget):
def __init__(self):
super().__init__()
self.initGrid()
def initGrid(self):
grid= QGridLayout()
test = QLabel('test')
board = Board()
clock = Clock()
board.setStyleSheet('background-color: pink')
clock.setStyleSheet('background-color: blue')
grid.addWidget(board, 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__':
app = QApplication(sys.argv)
gui = MainWin()
sys.exit(app.exec_())编辑:多亏了谢夫的回答,我想我找到了我做错的地方。为了可视化这些小部件,我在Qt文档中使用setStyleSheet函数改变了它们的背景:
注意:如果您从QWidget中子类定制小部件,那么为了使用StyleSheets,需要为自定义小部件提供一个paintEvent:
至于测试标签,我使用它来进行进一步的测试,但是忘记了将它添加到网格布局中,这增加了更多的混乱。
发布于 2020-05-09 12:47:09
不幸的是,“任择议定书”声称
问题是,即使在使用了QMainWindow函数之后,中心小部件也没有在setCentralWidget上显示。
没有详细说明。
我粗略地看了一下消息来源,得出的结论是
QMainWindow。到目前为止还不错。
然后,我将OP的全部源代码复制到本地框中。
要使它运行,我必须添加/修改各种内容:
sys.argv (在app = QApplication(sys.argv)中),import sys也是必需的。Board和Clock丢失了。
#board = Board() #clock = Clock() clock = QLabel('Clock') #board.setStyleSheet(‘背景颜色:粉红色’)test = QLabel('test')没有添加到网格布局中。
Grid.addWidget(测试,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中运行它(因为我手头只有Windows10和cygwin ):
$ chmod a+x testQMainWindowCentralWidget.py
$ ./testQMainWindowCentralWidget.py 并得到:

现在,QMainWindow.setCentralWidget()按预期工作。
我不知道行动小组到底遇到了哪些问题。
我不确定OP的公开代码是否是确切的复制/粘贴,缺少的细节是否是OP问题的实际来源。
当我试图使它运行时,我仔细考虑了我在第一次尝试中得到的跟踪,并逐步修复了bug,直到得到上述结果。
https://stackoverflow.com/questions/61696146
复制相似问题