我正在使用我设计的界面运行一些程序。简洁地解释这个问题有点困难,因此我将首先介绍游戏中的元素。我有一个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中,但这与我想做的事情冲突。是什么导致怪异的偏移量?我有什么可以做的呢?

非常感谢你!

最佳答案

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


在SubWidget中。

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

09-03 23:19