Conectar la señal a la ranura inmediatamente hace que se emita la señal

Estoy escribiendo un programa con python 3.3.3 y pyqt5. He conectado muchas señales y ranuras sin ningún problema. Este está causando un problema. Mi código sigue:

   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)

Este código llena los cuadros combinados con proveedores y modelos. El cuadro combinado de proveedor se completa al inicio. El cuadro combinado modelo se llena con datos diferentes para cada proveedor. Cada vez que el usuario elige un proveedor diferente, el cuadro combinado modelo debe actualizarse con una lista diferente.

Qué debería pasar:

Cuando se llama al método populateVendorAndModelComboBoxes, la primera parte del programa coloca la lista de proveedores en el cuadro combinado de proveedores. Luego se establecerá una conexión entre la señal currentTextChanged y la ranura _vendorChanged. Entonces, la función _vendorChanged debería llamarse inicialmente para configurar el cuadro combinado Modelo. A partir de ese momento, se debe llamar a la función _vendorChanged siempre que el usuario elija un nuevo proveedor.

Qué está pasando:

Cuando se realiza la conexión entre la señal currentTextChanged y la ranura _vendorChanged, se llama inmediatamente a la función _vendorChanged. No debería llamar inmediatamente a la función _vendorChanged. Esto no sucede con ninguna de mis otras conexiones de señal / ranura. La función _vendorChanged se ejecuta sin error, luego el punto de ejecución vuelve a la declaración vendorComboBox.currentTextChanged.connect .... e inmediatamente recibo un error TypeError: el argumento 1 tiene un tipo inesperado 'NoneType'.

Si comento la declaración que establece la conexión, el programa funciona sin errores. El cuadro combinado de proveedor está lleno de proveedores y el cuadro combinado de modelo está lleno de modelos del primer proveedor de la lista. Eso indica que el código _vendorChanges funciona correctamente.

Tengo dos preguntas. ¿Por qué la instrucción connect hace que la función _vendorChanged se ejecute inmediatamente? ¿Cuál es la causa del mensaje de error?

Respuestas a la pregunta(3)

Su respuesta a la pregunta