为什么我的 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
来保存它,您可以利用现有的中央小部件。)
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
来保存它,您可以利用现有的中央小部件。)