【问题标题】:Align every widget of a QHBoxLayout to the top将 QHBoxLayout 的每个小部件对齐到顶部
【发布时间】:2018-08-14 02:57:18
【问题描述】:

我正在尝试将 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_( ))

我明白了:

我想要的是:

【问题讨论】:

    标签: python pyqt alignment pyqt5 qlayout


    【解决方案1】:

    您必须对每个布局应用对齐方式:

    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_( ))
    

    【讨论】:

    • 多么简单。谢谢