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)
这是一个简单的应用程序。只有一个标签和三个按钮。但是布局给我带来了麻烦。
我想让标签的子布局和按钮的子布局具有相同的高度。但我无法让它工作。无论是 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)