PySide:如果我将一个带有自己布局的自定义窗口小部件添加到父窗口小部件的布局中,它就会有一个偏移量。是什么导致这个?

时间:2014-02-13 00:11:52

标签: python qt pyqt4 pyside

我正在使用我正在设计的界面遇到一些程序。简明扼要地解释这个问题有点难,所以我先介绍一下这些元素。我有一个QMainWindow MainWindow,它将QWidget MainWidget作为中心小部件。 MainWidget包含两个小部件:QLabel和QWidget SubWidget。 SubWidget仅包含QLabel。

更好的说明(我希望我能正确表示继承。无论哪种方式,MainWindow都继承自QMainWindow等):

form (MainWindow::QMainWindow)
|main_widget (MainWidget::QWidget)
||label_1 (QLabel)
||sub_widget (SubWidget::QWidget)
|||label_2 (QLabel)

问题在于此; SubWidget中的标签右侧有一个偏移量。 An image can be found here

代码相当简单。我试着尽可能地浓缩它。

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.main_widget = MainWidget(self)

        self.setCentralWidget(self.main_widget)

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.label_1 = QLabel("Label 1")

        self.sub_widget = SubWidget()

        self.layout = QVBoxLayout()  # Vertical layout.
        self.layout.addWidget(self.label_1)
        self.layout.addWidget(self.sub_widget)

        self.setLayout(self.layout)

class SubWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.label_2 = QLabel("Label 2")

        self.layout = QHBoxLayout()  # Horizontal layout.
        self.layout.addWidget(self.label_2)

        self.setLayout(self.layout)

def main():
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

if __name__ == "__main__":
    main()

显而易见的解决方案是将label_2放在MainWidget中,但这与我想要做的事情有冲突。是什么导致奇怪的偏移?我能做些什么来打击它吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

self.layout.setContentsMargins(0, 0, 0, 0)
在SubWidget中

http://doc.qt.io/qt-5/qlayout.html#contentsMargins