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

时间:2015-04-02 08:56:59

标签: python qt pyqt

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)

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

output

2 个答案:

答案 0 :(得分:3)

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

您当前的代码只是说您的小部件(mainWidget)是主窗口的子代。它没有说明把它放在哪里,或者如何铺设它。所以Qt只是将它转储到指定父级的坐标(0,0)。

答案 1 :(得分:3)

您需要将这些小部件和布局放在QMainWindow中央小部件中。以下是QMainWindow

的组成

enter image description here

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

在您的情况下,解决方案是将QHBoxLayout设置为中央窗口小部件的布局:

self.centralwidget.setLayout(self.mainLayout)

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