pyqt connect to functools.partail передает значение сигнала

У меня возникли проблемы с передачей аргументов в функцию с помощью functools.partial() при подключении его к сигналу Qt графического интерфейса (log_this() является фиктивной функцией просто для сообщения о проблеме):

self.ui.comboBox_1.currentIndexChanged.connect(functools.partial(self.log_this, val='aaaaaa'))

def log_this(self, val='0000'):
    log.info(val)

получил ошибку:

TypeError: log_this () получил несколько значений для аргумента 'val'

если я использую лямбду для вызова функции, она работает нормально:

self.ui.comboBox_1.currentIndexChanged.connect(lambda: self.log_this(val='aaaaaa'))

глядя на это, я вижу, что log_this() получает текущий индекс comboBox. Я также пытался работать с позиционными аргументами и также получил ошибку, как указано выше.

Я хочу понять, правильно ли использовать functools.partial() или я должен просто придерживаться лямбды в таких случаях. если правильно, как правильно это сделать?

Добавление более подробной информации:

мои занятия:

class AppMainWindow(QtGui.QMainWindow):
    message = QtCore.Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.manual_test = True
        self.all_tests_enabled = False
        self.set_connections()

    def set_connections(self): 
        self.ui.comboBox_1.currentIndexChanged.connect(
            functools.partial(self.log_this, val='aaaaaa'))
        self.ui.pushButton_1.clicked.connect(self.add_item)

    def log_this(self, val='0000'):
        log.info(val)

Я использую PySide 1.2.2.

Заранее спасибо!

1 ответ

Это происходит потому, что currentIndexChanged испускает со значением (возможно, новый индекс), который ваш метод получает как val, У вас есть различные варианты здесь:

  • Подключив его к чему-то вроде lambda _idx: self.log_this('aaaaaa')
  • С помощью currentIndexChanged[()].connect(...) чтобы получить версию сигнала без аргументов - это должно работать с PyQt5, я не знаю насчет PySide.
  • Добавление позиционного аргумента вроде _idx в log_this до val
Другие вопросы по тегам