PyQt5 - 按钮和标签应具有相同的高度

PyQt5 - Buttons and Label shall have the same height

这是一个简单的应用程序。只有一个标签和三个按钮。但是布局给我带来了麻烦。

我想让标签的子布局和按钮的子布局具有相同的高度。但我无法让它工作。无论是 BoxLayouts 还是 GridLayouts。我尝试添加 Stretch,因此两种布局都具有相同的拉伸因子和各种不同的东西。我确定答案很简单,但我无法弄清楚。 我也在 QtDesigner 中尝试过,所以我可以检查和比较代码部分,但是:

这是我设计的

并在 运行 代码时得到了这个,按钮再次粘在底部并且与标签的高度不同

但是,这是我的代码:

(我知道这里不需要网格布局,这只是某种尝试解决问题。无论如何我不认为网格布局是问题,因为我遇到了同样的问题BoxLayouts 或只是没有布局的标签。)

import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QWidget, QApplication, QHBoxLayout, QLabel, QVBoxLayout, QPushButton, QGroupBox, \
    QGridLayout, QMainWindow, QSizePolicy


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 50, 400, 300)
        self.setWindowTitle("Fretboard Note Quiz")

        self.layout()

        self.show()

    def layout(self):
        glay = QGridLayout()
        self.setLayout(glay)

        hbox1 = QHBoxLayout()       #upper layout for label
        hbox2 = QHBoxLayout()       #bottom layout for buttons

        btn1 = QPushButton("1")
        btn2 = QPushButton("2")
        btn3 = QPushButton("3")

        #adding the buttons to the bottom layout
        hbox2.addWidget(btn1)
        hbox2.addWidget(btn2)
        hbox2.addWidget(btn3)


        label = QLabel("Text")
        hbox1.addWidget(label)

        glay.addLayout(hbox1, 0, 1)
        glay.addLayout(hbox2, 1, 1)
        glay.setRowStretch(0, 1)
        glay.setRowStretch(1, 1)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Window()
    sys.exit(app.exec_())

在这种情况下,最简单的方法是使用 QWidget 作为容器,因为默认情况下它们以与 QLabel 相同的方式拉伸,因此它们将尝试占据相同的 space。

您的初始代码存在问题,拉伸因子不适用于布局,但适用于小部件。

最后 layout() 是一个方法,所以不要隐藏它用于其他用途,函数的名称应该描述方法的操作。

import sys

from PyQt5.QtWidgets import (
    QApplication,
    QHBoxLayout,
    QLabel,
    QPushButton,
    QVBoxLayout,
    QWidget,
)


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 50, 400, 300)
        self.setWindowTitle("Fretboard Note Quiz")

        self.build_layout()

    def build_layout(self):
        btn1 = QPushButton("1")
        btn2 = QPushButton("2")
        btn3 = QPushButton("3")

        label = QLabel("Text")

        button_container = QWidget()
        hlay = QHBoxLayout(button_container)
        hlay.addWidget(btn1)
        hlay.addWidget(btn2)
        hlay.addWidget(btn3)

        vlay = QVBoxLayout(self)
        vlay.addWidget(label)
        vlay.addWidget(button_container)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

也许你可以像这样设置按钮的最小高度:

ui.pushButton.setMinimumHeight(100)