【问题标题】:How to distinguish between left and right click with QSystemTrayIconQSystemTrayIcon如何区分左击和右击
【发布时间】:2023-03-13 21:19:01
【问题描述】:

问题

在 MacOS (Sierra 10.12.6) 上运行以下 PyQt5 代码时

self.tray_icon = QtWidgets.QSystemTrayIcon(QtGui.QIcon("icon/path"), self)
self.tray_icon.activated.connect(self.on_systray_activated)

[...]

def on_systray_activated(self, i_reason):
    logging.debug("entered on_systray_activated. i_reason = " + str(i_reason))

即使右键单击,我们也会得到activation reason QSystemTrayIcon::Trigger

在其他系统(例如 XFCE)上,当用户右键单击时,我们会得到 QSystemTrayIcon::Context

问题

如何区分MacOS系统托盘图标的左键和右键?

【问题讨论】:

    标签: python macos qt pyqt qsystemtrayicon


    【解决方案1】:

    QApplication.mouseButtons方法可以用来获取当前的state of the mouse buttons

    def on_systray_activated(self, i_reason):
        buttons = QtWidgets.qApp.mouseButtons()
        if buttons & QtCore.Qt.RightButton:
            logging.debug('on_systray_activated: right-button')
    

    【讨论】:

    • 谢谢你的回答,我用Mac电脑的朋友现在已经试过了,不幸的是它不起作用,右键没有捕捉到。可能是因为输入on_systray_activated函数时鼠标按键不再按下?我尝试了mouseButtons()(在与此不同的代码库中),结果证明在处理clicked 信号时mouseButtons() 总是返回0,但它在处理pressed 而不是clicked 时有效
    • @sunyata。呸——我有一种预感,它可能行不通,但我认为值得一试。上下文菜单通常在鼠标按下时触发,当在contextMenuEvent() 内部调用时,mouseButtons()确实为我(在 linux 上)给出了正确的结果。 activation reason 的文档似乎建议必须设置上下文菜单才能在 mac 上获得正确的行为。你在设置一个吗?
    • 是的,我们使用self.tray_icon.setContextMenu(self.tray_menu) 设置它,并且它可以在我们测试过的其他系统上运行(LXDE 有一些限制,但这与这个问题无关)。我认为我们只需要使用我们目前拥有的东西。不过,感谢您抽出宝贵的时间做出回应,因为知道我并不是唯一一个研究过这个问题的人,所以离开这个问题我感觉更自在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2019-05-03
    相关资源
    最近更新 更多