Durch das Anschließen des Signals an den Steckplatz wird sofort ein Signal ausgegeben

Ich schreibe ein Programm mit Python 3.3.3 und pyqt5. Ich habe viele Signale und Slots problemlos angeschlossen. Dieser verursacht ein Problem. Mein Code folgt:

   def populateVendorAndModelComboBoxes(self, vendorComboBox, modelComboBox):
    dictVendors = {}
    #for rclass in sorted(list(directory.DRV_TO_RADIO.values())):
    for rclass in list(directory.DRV_TO_RADIO.values()):
        if not issubclass(rclass, chirp_common.CloneModeRadio) and \
                not issubclass(rclass, chirp_common.LiveRadio):
            continue

        if not rclass.VENDOR in dictVendors:
            dictVendors[rclass.VENDOR] = []

        dictVendors[rclass.VENDOR].append(rclass)

    vendorComboBox.addItems(sorted(list(dictVendors)))

    def _vendorChanged(vendorCBox, vendorsDict, modelCBox):

        modelsList = vendorsDict[vendorCBox.currentText()]

        added_models = []

        modelCBox.clear()
        for rclass in modelsList:
            if rclass.MODEL not in added_models:
                added_models.append(rclass.MODEL)
        print("adding to modelCB")
        modelCBox.addItems(sorted(added_models))
        print("Done adding to modelCB")

    vendorComboBox.currentTextChanged.connect(_vendorChanged(vendorComboBox, dictVendors, modelComboBox))
    _vendorChanged(vendorComboBox, dictVendors, modelComboBox)

Dieser Code füllt Kombinationsfelder mit Anbietern und Modellen. Das Hersteller-Kombinationsfeld wird beim Start ausgefüllt. Die Modell-Combobox ist für jeden Anbieter mit unterschiedlichen Daten gefüllt. Jedes Mal, wenn der Benutzer einen anderen Anbieter auswählt, muss die Modell-Combobox mit einer anderen Liste aktualisiert werden.

Was soll passieren:

Wenn die Methode populateVendorAndModelComboBoxes aufgerufen wird, legt der erste Teil des Programms die Lieferantenliste in der Lieferanten-Combobox ab. Dann wird eine Verbindung zwischen dem currentTextChanged-Signal und dem _vendorChanged-Slot hergestellt. Anschließend sollte zunächst die Funktion _vendorChanged aufgerufen werden, um die Model-Combobox einzurichten. Von da an sollte die Funktion _vendorChanged aufgerufen werden, wenn der Benutzer einen neuen Anbieter auswählt.

Was ist los:

Wenn die Verbindung zwischen dem currentTextChanged-Signal und dem _vendorChanged-Slot hergestellt wird, wird die _vendorChanged-Funktion sofort aufgerufen. Die Funktion _vendorChanged sollte nicht sofort aufgerufen werden. Dies ist bei keinem meiner anderen Signal- / Steckplatzverbindungen der Fall. Die _vendorChanged-Funktion wird ohne Fehler ausgeführt. Der Ausführungspunkt wird dann auf die Anweisung vendorComboBox.currentTextChanged.connect .... zurückgesetzt, und es wird sofort ein Fehler angezeigt. TypeError: Argument 1 hat den unerwarteten Typ 'NoneType'.

Wenn ich die Anweisung, die die Verbindung herstellt, auskommentiere, funktioniert das Programm fehlerfrei. Die Lieferanten-Combobox ist mit Lieferanten gefüllt und die Modell-Combobox ist mit Modellen des ersten Lieferanten in der Liste gefüllt. Dies zeigt an, dass der _vendorChanges-Code ordnungsgemäß funktioniert.

Ich habe zwei Fragen. Warum wird durch die connect-Anweisung die Funktion _vendorChanged sofort ausgeführt? Was ist die Ursache der Fehlermeldung?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage