QVBoxLayout的“setAlignment”方法未按预期工作

2024-06-17 12:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

from PySide import QtCore
from PySide import QtGui

class UI(QtGui.QDialog):

    def __init__(self):

        super(UI,self).__init__()
        self.setWindowTitle('My UI Title')
        self.create_layout()

    def create_layout(self):

        mainLayout = QtGui.QGridLayout()

        radioButtonSetALayout = QtGui.QVBoxLayout()
        radioButtonSetBLayout = QtGui.QVBoxLayout()

        #radio button set A

        setALabel = QtGui.QLabel('Fruit')
        radioButtonA = QtGui.QRadioButton('Apple')
        radioButtonB = QtGui.QRadioButton('Pear')

        radioButtonSetALayout.addWidget(setALabel)
        radioButtonSetALayout.addWidget(radioButtonA)
        radioButtonSetALayout.addWidget(radioButtonB)

        #radio button set B

        setBLabel = QtGui.QLabel('Junk')
        radioButtonC = QtGui.QRadioButton('Pizza')
        radioButtonD = QtGui.QRadioButton('Donut')
        radioButtonE = QtGui.QRadioButton('Ice Cream')

        radioButtonSetBLayout.addWidget(setBLabel)
        radioButtonSetBLayout.addWidget(radioButtonC)
        radioButtonSetBLayout.addWidget(radioButtonD)
        radioButtonSetBLayout.addWidget(radioButtonE)

        #alignment

        radioButtonSetALayout.setAlignment(QtCore.Qt.AlignTop)
        radioButtonSetBLayout.setAlignment(QtCore.Qt.AlignTop)

        #add sub layouts to main layout

        mainLayout.addLayout(radioButtonSetALayout,0,0)
        mainLayout.addLayout(radioButtonSetBLayout,0,1)

        self.setLayout(mainLayout)

if __name__ == '__main__':

    try:
        ui.close()
    except:
        pass

    ui = UI()
    ui.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    ui.show()

我在一个QGridLayout中有两个QVBoxLayout并排,每个qradiobutton的数量不同。默认情况下,我的两组qradiobutton不会很好地对齐,因为QVBoxLayout的默认行为是将小部件添加到中心对齐。在

我认为通过设置QVBoxLayout的对齐方式可以解决这个问题,但它似乎并没有改变任何东西。在

我的另一个想法是在没有QRadiobutton的列中添加某种看不见的“间隔符”,以匹配另一列中的数量,试图使它们均匀,但从我的尝试来看,这并不十分精确。在


Tags: fromselfuiqtpysidelayoutqtguiqtcore
1条回答
网友
1楼 · 发布于 2024-06-17 12:17:07

^{}有第四个(可选)参数alignment。在

The alignment is specified by alignment. The default alignment is 0, which means that the widget fills the entire cell.

因此,与其设置QVBoxLayouts的对齐方式,不如在添加布局时进行设置。在

def create_layout(self):

    ....

    mainLayout.addLayout(radioButtonSetALayout,0,0,QtCore.Qt.AlignTop)
    mainLayout.addLayout(radioButtonSetBLayout,0,1,QtCore.Qt.AlignTop)

    self.setLayout(mainLayout)

相关问题 更多 >