Пользовательский виджет не отображается в главном окне - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь создать собственный виджет и заставить его появляться в Grid Layout в главном окне.

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 в сетку, он появится.

1 Ответ

0 голосов
/ 27 апреля 2018

Как есть, ваш MyCustomWidget - это просто стандартный виджет с атрибутом testText, содержащий QLabel. Если вы хотите, чтобы он содержал подвиджеты, которые будут отображаться в вашем главном окне, вам нужно создать экземпляр макета, добавить подвиджеты в макет, а затем добавить макет в MyCustomWidget:

В конце настройки MyCustomWidgetUi

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

self.gridLayout.addWidget(self.testText)

#add all other widgets here

self.setLayout(self.gridLayout)

Вы также можете создавать встроенные макеты, вызывая метод addLayout в родительском макете и передавая ему дочерний макет!

...