PyQt:如何让QLabel占据整个窗口?

3

我在一个窗口中放置了三个标签,但这三个标签仅占窗口的一小部分。以下是我的代码:

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()),因为我需要新的布局来支持其他小部件。

我理解你的部分意思,你是想让右侧部分一开始不显示还是只是让它为空? - eyllanesc
我希望右侧部分为空。 - Qiang Zhang
请查看我的回答... - eyllanesc
非常感谢您的回答,它确实起作用了。然而,我发现了一些有趣的事情:如果我将allLayout.addLayout(QVBoxLayout()) 更改为allLayout.addLayout(QHBoxLayout()) ,那么代码就会起作用。您知道为什么吗? - Qiang Zhang
在我看来,布局处理的某些变量存在未定义行为,等我有时间时,我计划向Qt报告此问题。 - eyllanesc
显示剩余2条评论
1个回答

1

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

# ...
allLayout.addLayout(qlayout)

empty_widget = QWidget()
empty_widget.setContentsMargins(0, 0, 0, 0)
lay = QVBoxLayout(empty_widget)

allLayout.addWidget(empty_widget)
layout.addLayout(allLayout)
# ...

输出:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接