PyQt и QSignalMapper / lambdas - несколько сигналов, один слот - PullRequest
1 голос
/ 08 октября 2010

У меня есть список действий в меню в PyQt, по одному для каждого отдельного канала, который я хочу отобразить. Таким образом, у меня есть Y, который устанавливает активную подачу на Y, Z устанавливает ее на Z и т. Д. (Для программы чтения комиксов).

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

Тем не менее, я хочу, чтобы эта функция слота, скажем, она называлась Foo, принимала параметр, чтобы решить, что было нажато. Таким образом, если X был нажат, то X, Y проходит Y и т. Д.

Огляделся, и один такой вопрос сказал использовать лямбду, которая не выглядела ... как-то правильно.

Другой способ был с QSignalMapper. Я пытался найти это, но не смог найти пример того, как его использовать.

Может кто-нибудь помочь?

Спасибо!

1 Ответ

5 голосов
/ 09 октября 2010

Вы можете использовать functools.partial (ссылка на документацию ):

import functools
...

# note that these are the 'new style' slot connections (not necessarily needed)
self.menu_entry_x.triggered.connect(functools.partial(myfunc, x))
self.menu_entry_y.triggered.connect(functools.partial(myfunc, y))

Приведенный выше пример очень простой, но я мог бы уточнить, если у вас есть еще вопросы.

...