Python pyqt:如何让QLabel占据整个窗口

Python pyqt:如何让QLabel占据整个窗口,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我在一个窗口中放置了三个标签,然而,这三个标签只占据了窗口的一小部分。这是我的密码: from PyQt5.QtWidgets import * import sys class ThreeDMPRWindow(QMainWindow): def __init__(self, image=None): super(ThreeDMPRWindow, self).__init__() self.resize(800, 600) widg

我在一个窗口中放置了三个标签,然而,这三个标签只占据了窗口的一小部分。这是我的密码:

from PyQt5.QtWidgets import *
import sys

class ThreeDMPRWindow(QMainWindow):

    def __init__(self, image=None):
        super(ThreeDMPRWindow, self).__init__()

        self.resize(800, 600)

        widget = QWidget()
        self.setCentralWidget(widget)
        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(layout)


        allLayout = QHBoxLayout()
        layout1 = QVBoxLayout()
        label1 = QLabel('label 1')
        label1.setStyleSheet("background: rgb(255,0,0)")
        layout1.addWidget(label1)

        layout2 = QVBoxLayout()
        label2 = QLabel('label 2')
        label2.setStyleSheet("background: rgb(255,0,0)")
        layout2.addWidget(label2)

        layout3 = QVBoxLayout()
        label3 = QLabel('label 3')
        label3.setStyleSheet("background: rgb(255,0,0)")
        layout3.addWidget(label3)

        qlayout = QGridLayout()
        qlayout.addLayout(layout1, 0, 0, 2, 1)
        qlayout.addLayout(layout2, 0, 1, 1, 1)
        qlayout.addLayout(layout3, 1, 1, 1, 1)
        allLayout.addLayout(qlayout)
        allLayout.addLayout(QVBoxLayout())

        layout.addLayout(allLayout)


app = QApplication(sys.argv)
window = ThreeDMPRWindow()
window.show()
app.exec_()

如果我们注释代码:allLayout.addLayout(QVBoxLayout()),这三个标签将占据整个窗口。我不知道为什么这个代码有这么大的区别。但是我不能删除代码allLayout.addLayout(QVBoxLayout()),因为我需要一些其他小部件的新布局

如果您希望有一个空间可以添加其他小部件,则必须使用QWidget而不是QVBoxLayout,并在该QWidget中添加QVBoxLayout:

#。。。
allLayout.addLayout(qlayout)
空_widget=QWidget()
空的_小部件。setContentsMargins(0,0,0,0)
lay=QVBoxLayout(空的_小部件)
allLayout.addWidget(空的\u小部件)
布局。添加布局(所有布局)
# ...
输出:


这看起来像一个bug,但我发现如果您将项目添加到QVBoxLayout(),它已修复,您是否已将小部件添加到QVBoxLayout()?是的,如果我将标签添加到QVBoxLayout,窗口将正常。但是,我需要布局为空,因为我会在为用户添加一些操作符之后为布局添加一些小部件。我部分理解您,您最初是希望不显示正确的部分,还是希望它为空?我希望正确的部分为空。请参阅我的答案。。。