Я пытаюсь реализовать кнопку «открыть», чтобы, если пользователь нажмет ее и удержит, появится меню приложений, из которых пользователь может выбрать; но как только пользователь отпускает мышь, меню должно исчезнуть. если пользователь отпускает мышь, не выбирая приложение в меню, он должен открыть файл с приложением по умолчанию. Я реализую эту кнопку как QToolButton
и подключаю сигналы следующим образом:
self.ui_open_btn.pressed.connect(self._onOpenBtnPressed)
self.ui_open_btn.triggered.connect(self._onOpenBtnTriggered)
def _onOpenBtnPressed(self):
self.ui_open_btn.showMenu()
def _onOpenBtnTriggered(self, action):
application_name = action.text()
# code to launch the application
Прямо сейчас, когда пользователь нажимает кнопку, всплывает меню. Однако меню все еще существует, когда пользователь отпускает кнопку, и действие в меню запускается при нажатии на него. Я пробовал как в режиме DelayedPopup
, так и в режиме InstantPopup
. Пока в меню установлено значение self.ui_open_btn
, я больше не могу поймать сигнал released
. Как я могу скрыть меню, когда пользователь отпускает мышь? Как можно запустить действие в меню, отпустив мышь?
--добавлен---
Я обнаружил еще одну проблему с использованием QToolButton
: меню всегда всплывает при нажатии кнопки. Вместо этого я хотел бы поймать сигнал pressed
, сделать некоторую проверку, чтобы определить, должно ли всплывать меню или нет. Поэтому я изменил свой подход к написанию своей индивидуальной кнопки инструментов, создав подклассы QPushButton
и QMenu
. Пожалуйста, смотрите мой код, представленный в ответе ниже.
Спасибо.
released
? - person mguijarr   schedule 03.10.2013self.ui_open_btn.menu().close()
иself.ui_open_btn.menu().hide()
. Ни один из них не работал. Я думаю, что проблема в том, что пока в меню установлено значениеself.ui_open_btn
, я больше не могу поймать сигналreleased
. - person user110   schedule 03.10.2013