繁体   English   中英

PyQt MainWindow 不显示小部件

[英]PyQt MainWindow not showing widgets

我正在用 PyQt 制作一个 GUI,我的 MainWindow 类有问题。 该窗口不会显示我在其他类中定义的小部件,或者它会在左上角显示一小部分小部件,然后将其余小部件剪掉。 有人可以帮我解决这个问题吗?

这是一些显示我的问题的示例代码。

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        self.resize(300, 400)
        self.centralWidget = QtGui.QWidget(self)
        self.hbox = QtGui.QHBoxLayout(self.centralWidget)
        self.setLayout(self.hbox)

        names = ['button1', 'button2', 'button3']
        testButtons = buttonFactory(names, parent=self)
        self.hbox.addWidget(testButtons)

class buttonFactory(QtGui.QWidget):
    def __init__(self, names, parent=None):
        super(buttonFactory, self).__init__(parent=parent)
        self.vbox = QtGui.QVBoxLayout()
        self.setLayout(self.vbox)
        for name in names:
            btn = QtGui.QPushButton(name)
            self.vbox.addWidget(btn)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    gui = MainWindow()
    gui.show()
    app.exec_()

QMainWindow 有一个中央小部件,它是一个容器,您应该在其中添加小部件。 它有自己的布局。 QMainWindow 的布局用于工具栏等。 必须使用setCentralWidget方法设置setCentralWidget 仅仅称其为self.centralWidget是不够的

请改用以下三行。

self.setCentralWidget(QtGui.QWidget(self))
self.hbox = QtGui.QHBoxLayout()
self.centralWidget().setLayout(self.hbox)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM