将QHboxLayout的每个小部件与Pyqt中的顶部对齐

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将QHboxLayout的每个小部件与Pyqt中的顶部对齐相关的知识,希望对你有一定的参考价值。

我正在尝试将QHBoxlayout中的每个小部件与顶部对齐,但我得到的是每个小部件似乎都居中。我认为这是由于有不同的尺寸。

例如:

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys



class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent
        self.setFixedWidth(300)
        self.setFixedHeight(100)

        self.wid = QWidget()
        self.setCentralWidget(self.wid)

        self.groups = QHBoxLayout()

        l_a1 = QLabel('A')
        a = QVBoxLayout()
        a.addWidget(l_a1)
        self.groups.addLayout(a)

        l_a2 = QLabel('A')
        l_b2 = QLabel('B')
        a_b = QVBoxLayout()
        a_b.addWidget(l_a2)
        a_b.addWidget(l_b2)
        self.groups.addLayout(a_b)


        l_a3 = QLabel('A')
        l_b3 = QLabel('B')
        l_c3 = QLabel('C')
        a_b_c = QVBoxLayout()
        a_b_c.addWidget(l_a3)
        a_b_c.addWidget(l_b3)
        a_b_c.addWidget(l_c3)
        self.groups.addLayout(a_b_c)

        self.groups.setAlignment(Qt.AlignTop)


        self.wid.setLayout(self.groups)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.setWindowTitle('window')
    ex.show()
    sys.exit(app.exec_( ))

我明白了:

enter image description here

我想要的是:

enter image description here

答案

您必须将对齐应用于每个布局:

class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__(parent=parent)
        self.setFixedSize(300, 100)

        self.wid = QWidget()
        self.setCentralWidget(self.wid)

        self.groups = QHBoxLayout(self.wid)

        l_a1 = QLabel('A')
        a = QVBoxLayout()
        a.addWidget(l_a1)

        l_a2 = QLabel('A')
        l_b2 = QLabel('B')
        a_b = QVBoxLayout()
        a_b.addWidget(l_a2)
        a_b.addWidget(l_b2)

        l_a3 = QLabel('A')
        l_b3 = QLabel('B')
        l_c3 = QLabel('C')
        a_b_c = QVBoxLayout()
        a_b_c.addWidget(l_a3)
        a_b_c.addWidget(l_b3)
        a_b_c.addWidget(l_c3)

        a.setAlignment(Qt.AlignTop)
        a_b.setAlignment(Qt.AlignTop)
        a_b_c.setAlignment(Qt.AlignTop)

        self.groups.addLayout(a)
        self.groups.addLayout(a_b)
        self.groups.addLayout(a_b_c)
        self.groups.setAlignment(Qt.AlignTop)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = SurfViewer()
    ex.setWindowTitle('window')
    ex.show()
    sys.exit(app.exec_( ))

enter image description here

以上是关于将QHboxLayout的每个小部件与Pyqt中的顶部对齐的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 无法访问动态创建的 QHBoxLayout 小部件

PyQt QTabWidget 多角小部件

PyQt4 - 自定义小部件类结构?

QHBoxLayout 间距

将自定义 QEvent 传播到 Qt/PyQt 中的父小部件

将 MouseDoubleClickEvent 添加到 PyQt5 中的 for 循环中制作的小部件 [重复]