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