Python 为什么我的标签在我的QHBoxLayout中堆叠在一起?

Python 为什么我的标签在我的QHBoxLayout中堆叠在一起?,python,pyqt,pyqt5,qmainwindow,qlayout,Python,Pyqt,Pyqt5,Qmainwindow,Qlayout,简单地说,我想使用Python的PYQT5在水平框布局中添加两个标签 当我执行这段代码时,这两个标签显示在彼此的顶部,即使将它们添加到QHBoxLayout应该将它们从左到右定位 我怎样才能解决这个问题 编译器:Python 3.7.4 32位 IDE:visualstudio代码 操作系统:Windows 10 我的代码: import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from PyQt5.QtGu

简单地说,我想使用Python的PYQT5在水平框布局中添加两个标签

当我执行这段代码时,这两个标签显示在彼此的顶部,即使将它们添加到QHBoxLayout应该将它们从左到右定位

我怎样才能解决这个问题

  • 编译器:Python 3.7.4 32位
  • IDE:visualstudio代码
  • 操作系统:Windows 10
我的代码:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class Interface(QMainWindow):
    def __init__(self):
        super().__init__()

        self.title = 'debug'
        self.mainLayout = QHBoxLayout()
        self.initGUI()

    def initGUI(self):
        self.setGeometry(0,0,200,200)
        self.setFixedSize(self.size())
        self.setWindowTitle(self.title)

        label1 = QLabel('test 1',self)
        label2 = QLabel('test 2',self)
        self.mainLayout.addWidget(label1)
        self.mainLayout.addWidget(label2)

        self.setLayout(self.mainLayout)
        self.show()    

    def close_application(self):
        sys.exit()

if __name__ == '__main__':
    app = QApplication([])
    window = Interface()
    sys.exit(app.exec_())
说明: QMainWindow是一个具有默认布局的特殊小部件:

这不允许建立另一个布局,并明确指出在终端/CMD中执行代码时获得的错误消息:

QWidget::setLayout: Attempting to set QLayout "" on Interface "", which already has a layout
因此,当布局未建立时,它不会处理QLabel的位置,并且当您作为父对象传递给window-
self
时,这两个属性都将设置在窗口的左上角位置

解决方案: 如前所述,您必须创建一个用作容器的中心小部件,然后设置布局:

def initGUI(self):
    self.setGeometry(0,0,200,200)
    self.setFixedSize(self.size())
    self.setWindowTitle(self.title)

    central_widget = QWidget() # <---
    self.setCentralWidget(central_widget) # <---

    label1 = QLabel('test 1')
    label2 = QLabel('test 2')
    self.mainLayout.addWidget(label1)
    self.mainLayout.addWidget(label2)

    central_widget.setLayout(self.mainLayout) # <---
    self.show()    
def initGUI(self):
自设置几何体(0,02000)
self.setFixedSize(self.size())
self.setWindowTitle(self.title)
central_widget=QWidget()#