Какую разницу делает «я» в качестве параметра в PyQt5 - PullRequest
0 голосов
/ 23 сентября 2018

В PyQt5, что ключевое слово self делает в качестве параметра при создании Widgets?Я не вижу никакой разницы между этими двумя, и оба прекрасно работают.

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        ###############This Part#############
        #QLCDNumber() and QSLider() also works fine below

        lcd = QLCDNumber(self)
        sld = QSlider(Qt.Horizontal, self)

        #####################################

        vbox = QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(sld)

        sld.valueChanged.connect(lcd.display)

        self.setLayout(vbox)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Signal and slot')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 23 сентября 2018

Нет никакой разницы.

TL; DR;

QWidget наследуется от QObject, и у QObject есть дерево иерархии между родителями и детьми, в C ++он служит для того, чтобы при удалении родителя он исключал своих потомков, чтобы можно было легко обрабатывать память, в случае PyQt это происходит так же, поскольку дескриптор памяти обрабатывается не напрямую python, а C ++.

предыдущая причина заключается в том, что он служит для передачи родительского параметра объектам QObject, с другой стороны, в QWidgets положение дочерних элементов всегда относительно родительского, поэтому, если вы передадите себя в качестве родителя, виджет будет нарисован на родительском объекте..

Переходя к вашему конкретному коду, нет никакой разницы, потому что макеты устанавливают родительский элемент виджетов, которые обрабатывают виджет там, где он установлен, так что вы можете устранить первоначальные отношения родства, так как макет установит их.

Мы можем увидеть разницу, если не будем использовать макет с моментаНикто не установит, где будет нарисован виджет, и поэтому виджеты не будут отображаться.

Без себя:

def initUI(self):
    lcd = QLCDNumber()
    sld = QSlider(Qt.Horizontal)

С собой:

def initUI(self):
    lcd = QLCDNumber(self)
    sld = QSlider(Qt.Horizontal, self)
...