PyQT5: что это логическое значение передается при запуске действия меню?

Итак, я относительно новичок в Python и пытаюсь изучить PyQt. Я хотел создать меню динамически на основе содержимого списка. Я нашел пример, который я адаптировал, и он выглядел так:

  for someText in myList:
        entry = QAction(someText,MainWindow)
        self.myMenu.addAction(entry)
        entry.triggered.connect(lambda menuItem=someText: self.doStuff(menuItem))
        entry.setText(someText)

Меню было создано, но при выборе пункта меню doStuff() всегда передавалось значение False. Поэтому я изменил вышеизложенное на:

  for someText in myList:
        entry = QAction(someText,MainWindow)
        self.myMenu.addAction(entry)
        entry.triggered.connect(lambda bVal, menuItem=someText: self.doStuff(bVal,menuItem))
        entry.setText(someText)

и, конечно же, теперь все работает так, как я хотел. Я все еще получаю False в bVal, который я просто игнорирую.

Я пытался просмотреть документацию PyQt, но справочный раздел ссылается на документацию C++, и мне не очевидно, что происходит.

Я хотел бы понять, что такое логическое значение и почему в моем случае оно всегда равно False. Я пытался изменить разные вещи, но мне не удалось найти сценарий, в котором это правда.

Спасибо

PyQT5.4, Python 3.4.2 в Windows.


person PaulM    schedule 04.02.2015    source источник


Ответы (1)


Документация C++ для инициированного сигнала не должна быть слишком сложной для понимания. :

void QAction::​triggered(bool checked = false)
...
Если действие может быть проверено, Checked имеет значение true, если действие проверено, или false, если действие не отмечено.

Таким образом, сигнал испускается с логическим параметром, который указывает на состояние «проверено» действия, и этот параметр заменяет значение по умолчанию для вашего аргумента menuItem.

person mata    schedule 04.02.2015
comment
Спасибо, почему-то не нашел. - person PaulM; 05.02.2015
comment
В PyQt/PySide вы должны явно запрашивать проверенное состояние, иначе оно всегда будет отправлять False (даже если действие было установлено для проверки). Итак, вам нужно будет сделать action.triggered[bool].connect(...). - person ekhumoro; 05.02.2015