Pyside对齐2个项目,1个项目右

时间:2015-11-24 11:30:05

标签: python pyside

[Leftmost][Left Most]---------[Rightmost]

我想要达到的目的是让最左边的复选框和标签,然后是最右边的按钮。

import sys
from PySide import QtGui, QtCore

class ButtonGroupBox(QtGui.QWidget):

    def __init__(self, parent=None):
        super(ButtonGroupBox, self).__init__(parent=parent)

        self.layout = QtGui.QGridLayout(self)
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setVerticalSpacing(0)
        self.layout.setHorizontalSpacing(0)

        self.layout_header = QtGui.QGridLayout()

        self.header = QtGui.QLabel()

        self.toggle = QtGui.QCheckBox()

        self.title = QtGui.QLabel("great")
        self.title.setMargin(0)

        self.closer = QtGui.QPushButton("x")
        self.closer.setFixedWidth(30)
        self.closer.setFixedHeight(30)

        self.groupBox = QtGui.QGroupBox()

        self.layout_header.addWidget(self.toggle, 0, 0, QtCore.Qt.AlignLeft)
        self.layout_header.addWidget(self.title, 0, 1, QtCore.Qt.AlignLeft)
        self.layout_header.addWidget(self.closer, 0, 2, QtCore.Qt.AlignRight)

        self.layout.addLayout(self.layout_header, 0, 0)
        self.layout.addWidget(self.groupBox, 1, 0)


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        # formatting
        self.resize(500, 500)
        self.setWindowTitle("Cameras")

        # widgets
        self.ListA = QtGui.QTreeWidget()
        self.ListB = QtGui.QTreeWidget()
        self.Button = QtGui.QPushButton()
        self.GP = ButtonGroupBox()

        self.mainLayout = QtGui.QGridLayout(self)
        self.mainLayout.setContentsMargins(5,5,5,5)
        self.mainLayout.addWidget(self.GP,0,0)

        self.setWindowTitle('QtGui.QSplitter')
        self.show()


    def onChanged(self, text):

        self.lbl.setText(text)
        self.lbl.adjustSize()      


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

您必须使用rowSpancolumnSpan来处理窗口布局。

笔画演示:

...
self.layout_header.addWidget(self.toggle, 0, 0, 0, 1)
self.layout_header.addWidget(self.title, 0, 1,0, 1)
self.layout_header.addWidget(self.closer, 0, 2,0, 4, QtCore.Qt.AlignRight)
...

您可以添加QLabel('')以在小部件之间添加空间。

self.layout_header.addWidget(self.toggle, 0, 0)
self.layout_header.addWidget(self.title, 0, 1)
self.layout_header.addWidget(QtGui.QLabel(''), 0, 2)
self.layout_header.addWidget(QtGui.QLabel(''), 0, 3)
self.layout_header.addWidget(self.closer, 0, 4)