PyQt и QSignalMapper / lambdas – несколько сигналов, один слот

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

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

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

Посмотрел вокруг, и один вопрос SO сказал, чтобы использовать лямбду, которая не выглядела … так или иначе.

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

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

Благодаря!

One Solution collect form web for “PyQt и QSignalMapper / lambdas – несколько сигналов, один слот”

Вы можете использовать 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)) 

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

  • Настройка прозрачного главного окна
  • PyQt: Иногда segfaults при использовании QApplication.quit
  • PyQt5 - Невозможно воспроизвести видео из потока
  • Как остановить приложение qt от замораживания основной программы?
  • Как динамически менять дочерние виджеты с помощью Python и Qt?
  • Шаги по установке PySide на окнах
  • Лучший способ добавить скрипты python в приложение QT?
  • PySide QPropertyAnimation не запускается
  • Python - лучший язык программирования в мире.