我正在使用我设计的界面运行一些程序。简洁地解释这个问题有点困难,因此我将首先介绍游戏中的元素。我有一个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