首页 > 解决方案 > 自定义小部件未出现在主窗口中

问题描述

我正在尝试创建一个自定义小部件并使其出现在主窗口的网格布局上。

class MyCustomWidget(QtGui.QWidget):
    def __init__(self):
        super(MyCustomWidget, self).__init__()
        self.setupUi()

    def setupUi(self):
        self.testText = QtGui.QLabel()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        self.testText.setFont(font)
        self.testText.setAlignment(QtCore.Qt.AlignCenter)
        self.testText.setObjectName(_fromUtf8("patientText"))
        self.testText.setText("Test")

class UIMainWindow(object):
    def setupUi(self, MainWindow):
        ...
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        ...

        self.test = MyCustomWidget()
        self.gridLayout.addWidget(self.test)

当我运行此代码时,会出现主窗口,但没有关于我创建的小部件的任何内容。如果我只是在网格布局中添加一个 QLabel,它就会出现。

标签: pythonpyqtpyqt4

解决方案


照原样,您MyCustomWidget只是一个标准小部件,其属性testText包含QLabel. 如果您希望它包含将显示在主窗口上的子小部件,您需要实例化一个布局,将子小部件添加到布局中,然后将布局添加到MyCustomWidget

在 MyCustomWidget 的 setupUi 结束时

self.gridLayout = QtGui.QGridLayout()
self.gridLayout.setObjectName(_fromUtf8("MyCustomWidgetLayout"))

self.gridLayout.addWidget(self.testText)

#add all other widgets here

self.setLayout(self.gridLayout)

您还可以通过调用addLayout父布局上的方法并将其传递给子布局来创建嵌入式布局!


推荐阅读