[英]How to align a check box with a button in PyQT5?
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.mainLayout = QFormLayout()
check_box = QCheckBox()
my_button = QPushButton("My button")
my_button.setFont(QFont("Roboto", 18))
self.mainLayout.addRow(check_box, my_button)
self.setLayout(self.mainLayout)
app = QApplication(sys.argv)
mainWindow = Window()
mainWindow.show()
sys.exit(app.exec_())
复选框与按钮不对齐。 我该如何排列它们? 它们都需要在 QFormLayout 上排成一行。
将小部件设置为 QFormLayout 的“标签”时,alignment 遵循默认行为,即在左上角对齐小部件(同时考虑大小策略)。
labelAlignment
属性在这里没有帮助,因为它只考虑水平alignment。
尝试手动设置用于“标签”小部件的布局项的 alignment 是不够的,因为 QFormLayout 以编程方式设置几何图形,并且“标签”始终是顶部对齐的。
要将小部件垂直居中,有两种可能性:
默认情况下,QCheckBox 有一个Fixed
vertical sizePolicy
,这意味着它始终具有相同的高度,因此由于 QFormLayout 的默认行为,它将是顶部对齐的。
您可以更改小部件的垂直策略,然后它将垂直居中:
check_box = QCheckBox()
check_box.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
重要提示:这仅适用于具有特定高度的控件的小部件,例如 QCheckBox 或 QRadioButton。 为“可调整大小”的小部件(如 QComboBox)设置扩展垂直策略将使该小部件占据整个可用高度。 为避免这种情况,请使用以下解决方案。
更合适的解决方案是为实际的小部件创建一个容器,为该容器指定一个扩展的垂直大小策略,设置一个基本的框布局并添加复选框。
基本布局(QGridLayout、QBoxLayout)总是试图让它们的小部件占据其布局“槽”中的所有可用空间,如果小部件有固定大小策略,那么它将在可用矩形中居中。
check_box = QCheckBox()
check_container = QWidget()
check_container.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
check_layout = QVBoxLayout(check_container)
check_layout.setContentsMargins(0, 0, 0, 0) # Important!
check_layout.addWidget(check_box)
my_button = QPushButton("My button")
my_button.setFont(QFont("Roboto", 18))
self.mainLayout.addRow(check_container, my_button)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.