PySide:如果我将具有自己布局的自定义小部件添加到父小部件的布局中,它就会有一个偏移量。这是什么原因造成的?



我遇到了一个带有我正在设计的界面的程序。简洁地解释这个问题有点困难,所以我先介绍一下起作用的元素。我有一个QMainWindow MainWindow,它将QWidget MainWidget作为中央widget。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 中的标签向右偏移。图片可以在这里找到。

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

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 中,但这与我想做的事情相冲突。是什么导致了奇怪的偏移?我能做些什么来对抗它吗?

谢谢!

self.layout.setContentsMargins(0, 0, 0, 0)

在子小部件中。

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

最新更新