为什么我的 PyQt 小部件重叠?

Why are my PyQt Widgets overlapping?

def __init__(self,parent=None):
    QMainWindow.__init__(self,parent)
    self.setWindowTitle("test")

    self.createActions()

    self.mainWidget=QWidget(self)
    self.mainLayout = QHBoxLayout(self.mainWidget)

    self.createListView()
    self.lv.setMinimumSize(200,200)

    self.textEdit = QTextEdit()
    self.textEdit.setMinimumSize(200,200)

    self.mainLayout.addWidget(self.lv)
    self.mainLayout.addWidget(self.textEdit)

所有这一切都是创建一个带有工具栏的 window 并将两个小部件放入 QHBoxLayout、一个 QListView 和一个 QTextEdit 中。然而出于某种原因,这三件事似乎是重叠的。 (工具栏在小部件下方可见)

QMainWindow 已经有一个布局可以处理菜单栏和状态栏之类的东西。它还有一个中央小部件,用于添加您自己的布局。因此,如果您添加代码行 self.setCentralWidget(self.mainWidget),那么您现有的具有布局 (mainLayout) 的小部件将被放置在 QMainWindow.

的布局构建中

您当前的代码只是说您的小部件 (mainWidget) 是主要 window 的子项。它没有说明放在哪里,也没有说明如何布置。所以 Qt 只是将它转储到指定父级的坐标 (0,0) 处。

您需要将这些小部件和布局放在 QMainWindow 中央小部件 中。下面是一个QMainWindow的组成:

(图片来自PyQt文档:http://pyqt.sourceforge.net/Docs/PyQt4/qmainwindow.html#centralWidget

对于您的情况,解决方案是将 QHBoxLayout 设置为中央小部件的布局:

self.centralwidget.setLayout(self.mainLayout)

(无需创建另一个 QWidget 来保存它,您可以利用现有的中央小部件。)