Есть ли способ выполнить функцию при нажатии QSystemTrayIcon?

#python #qt #pyqt #qsystemtrayicon

#python #qt #pyqt #qsystemtrayicon

Вопрос:

У меня есть QSystemTrayIcon, и я хочу выполнить функцию, щелкнув по ней левой кнопкой мыши и щелкнув по ней правой кнопкой мыши. Есть ли способ сделать это? Спасибо.

Вот мой код, мой класс Trail (не производный от QSystemTrayIcon, но это нормально)

 app = _qt.QApplication(sys.argv)
mainwindow = None
# mainwindow is defined just before calling a new Trail object, don't worry

class Trail :
    def __init__(self,win) :
        self.mainwindow = win

    def reopen(self) :
        try :
            self.mainwindow.show()
            app.setActiveWindow(self.mainwindow)
        except Exception as e :
            utils.functions.alert("Erreur","Erreur, impossible de réouvrir l'application (" str(e) ")")

    def close_tray(self) :
        self.tray.setVisible(False)
        os._exit(0)

    def on_clicked(self) :
        print("Test")

    def call(self) :
        try :
            self.icon = _qt.QIcon(utils.vars.ressources_dir "logo-min-white.png")

            # Adding item on the menu bar
            self.tray = _qt.QSystemTrayIcon()
            self.tray.setIcon(self.icon)
            self.tray.setVisible(True)

            # Creating the options
            self.menu = _qt.QMenu()
            self.option1 = _qt.QAction("Rouvrir")
            self.option1.triggered.connect( self.reopen )
            self.menu.addAction(self.option1)
            self.menu.addSeparator()

            # To quit the app
            self.quitter = _qt.QAction("Quitter l'application")
            self.quitter.triggered.connect( self.close_tray )
            self.menu.addAction(self.quitter)

            # Adding options to the System Tray
            self.tray.setContextMenu(self.menu)
            self.tray.trigger(self.on_clicked)
        except Exception as e :
            print("Erreur lors du lancement du trail : " str(e))
  

Комментарии:

1. Вы ищете QSystemTrayIcon::activated ?

2. Хорошо, спасибо, я искал aboutToShow, подробнее см. Мой ответ ^^

Ответ №1:

(см. Комментарий @scopchanov)

Хорошо, отлично, я нашел решение :

Сразу после

 self.menu = _qt.QMenu()
  

Я добавил

 self.menu.aboutToShow.connect(self.myAwesomeFunctionWhenRightClickingOnTheTray)
  

И теперь, если я щелкну правой кнопкой мыши на своем трее, моя функция будет выполнена непосредственно перед отображением фактического меню!

Спасибо @scopchanov !

(Я искал «QSystemTrayIcon активированный сигнал пример pyqt» в Google, и это сработало… Раньше я не искал ничего хорошего.)