MacOS Pyside2 QSystemTrayIcon, левый клик / правый разные функции

Я хотел бы знать, как сделать в Python/Pyside2:

Создайте QSystemTrayIcon с пользовательским значком, в котором:

  • Если я нажимаю левую кнопку на нем, я делаю пользовательское действие (просто печатать "нажатие левой кнопки мыши"). Меню не должно отображаться...

  • Если я щелкну на нем правой кнопкой, появится контекстное меню с действием выхода, чтобы закрыть программу.

На MacOS, может быть, не в win или linux, меню просто открывается при нажатии мыши... Поэтому нужно различать левый и правый клик, в противном случае оба действия будут выполняться с помощью левого и правого клика. Смотрите примечание здесь: в macOS... так как меню открывается при нажатии мыши

Мне нужна помощь в реализации различий левого и правого клика в следующем коде:

from PySide2 import QtWidgets
import sys

class SystrayLauncher(object):

    def __init__(self):
        w = QtWidgets.QWidget() #just to get the style(), haven't seen other way
        icon = w.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxInformation)
        self.tray = QtWidgets.QSystemTrayIcon()
        self.tray.setIcon(icon)
        self.tray.setVisible(True)
        self.tray.activated.connect(self.customAction)

        # I JUST WANT TO SEE THE MENU WHEN RIGHT CLICK...
        self.trayIconMenu = QtWidgets.QMenu()
        self.quitAction = QtWidgets.QAction("&Quit", None, triggered=QtWidgets.QApplication.instance().quit)
        self.trayIconMenu.addAction(self.quitAction)
        self.tray.setContextMenu(self.trayIconMenu)

    # JUST WANNA USE THE ACTION WITH LEFT CLICK
    def customAction(self, signal):
        print "left click pressed"

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setQuitOnLastWindowClosed(False)

    sl = SystrayLauncher()
    sys.exit(app.exec_())

Кто-нибудь может мне помочь?

0 ответов

Вы можете различить "причину" щелчка и решить, что делать. Поэтому вам нужно будет добавить такую ​​функцию:

def right_or_left_click(reason):
    if reason == QSystemTrayIcon.ActivationReason.Trigger:
        print("Left-click detected")
    elif reason == QSystemTrayIcon.ActivationReason.Context:
        print("Right-click detected")
    elif reason == QSystemTrayIcon.ActivationReason.MiddleClick:
        print("Middle-click detected")
    else:
        print("Unknown reason")

self.tray.activated.connect(right_or_left_click)

Затем вы можете вызвать нужную функцию щелчком левой или средней кнопкой мыши. Щелчок правой кнопкой мыши занимает ваше контекстное меню:)

Другие вопросы по тегам