Я пытаюсь уменьшить количество сигналов, которые я должен использовать в своих контекстных меню. Меню состоит из действий, которые переключают режим работы программы, поэтому операция, выполняемая слотами, очень проста. Цитирование документацию по QMenu :: срабатывает,PyQt: Объединение сигналов в один слот
нормально, при подключении срабатывает сигнал каждого меню действий (в) его собственный пользовательский слот, но иногда вы хотите подключить несколько действий к одному слоту, например, когда у вас есть группа тесно связанных действий, таких как «left justify», «center», «right justify».
Однако я не могу понять, как это осуществить, и документация не вдавалась в подробности.
Предположим, у меня есть действия actionOpMode1
и actionOpMode2
в меню actionMenu
и слот setOpMode
. Я хочу, чтобы setOpMode
вызывался с параметром, который каким-то образом связан с тем, какое действие было инициировано. Я пробовал различные перестановки на эту тему:
QObject.connect(self.actionMenu, SIGNAL('triggered(QAction)'), self.setOpMode)
Но я даже не получил его называть setOpMode, что говорит о том, что actionMenu никогда не «чувствует себя срабатывает», так сказать.
В this SO question, он предположил, что это может быть сделано с lamdbas, но это:
QObject.connect(self.actionOpMode1, SIGNAL('triggered()'), lambda t: self.setOpMode(t))
дает "<lambda>() takes exactly 1 argument (0 given)"
. Я не могу сказать, что я действительно понимаю, как это должно работать, поэтому я, возможно, сделал что-то неправильно при переходе с нажатого() на triggered().
Как это сделать?
+1, QSignalMapper спроектирован _exactly_ для этой цели (и довольно элегантно, я тоже думаю), поэтому он предлагает архитектурное решение. –
-1 Не используйте QSignalMapper в Python, нет необходимости. –