PyQt5 - 按钮和标签应具有相同的高度
Posted
技术标签:
【中文标题】PyQt5 - 按钮和标签应具有相同的高度【英文标题】:PyQt5 - Buttons and Label shall have the same height 【发布时间】:2021-12-16 18:21:24 【问题描述】:这是一个简单的应用程序。只有一个标签和三个按钮。但是布局给我带来了麻烦。
我想让标签的子布局和按钮的子布局具有相同的高度。但我无法让它工作。 BoxLayouts 和 GridLayouts 都不是。我尝试添加拉伸,所以两种布局都有相同的拉伸因子和各种不同的东西。我确信答案很简单,但我无法弄清楚。 我也在 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_())
【问题讨论】:
【参考方案1】:在这种情况下,最简单的方法是使用 QWidget 作为容器,因为默认情况下它们的拉伸方式与 QLabel 相同,因此它们会尝试占用相同的空间。
您的初始代码的问题是拉伸因子不适用于布局,但适用于小部件。
最后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_())
【讨论】:
【参考方案2】:也许您可以将按钮的 minimunHeight 设置为:
ui.pushButton.setMinimumHeight(100)
【讨论】:
以上是关于PyQt5 - 按钮和标签应具有相同的高度的主要内容,如果未能解决你的问题,请参考以下文章