pyXFCE和Qt:左键点击系统托盘没有任何作用



>Background

我正在 PyQt5 中开发一个使用系统托盘的应用程序。我已经在 LXDE 上尝试过该应用程序,其中左键单击系统托盘图标会显示菜单(右键单击由 LXDE 处理)。我运行XFCE的朋友现在也尝试了该应用程序,但对他来说,左键单击系统托盘图标时没有任何反应,要查看菜单,他必须右键单击

问题

如何在 XFCE 图标中左键单击系统托盘以显示系统托盘菜单?

设置

Qt版本:5.7.1

法典

tray_icon = QtWidgets.QSystemTrayIcon(
    QtGui.QIcon(mc_global.get_app_icon_path()),
    self.matc_qapplication
)
tray_icon.show()
tray_menu = QtWidgets.QMenu(main_window)
# adding menu entries
tray_icon.setContextMenu(tray_menu)

XFCE基于GTK2,其托盘无法处理鼠标左键单击。解决方法是安装一个包sni-qt,该包添加额外的菜单项"激活"以右键单击鼠标。安装此软件包后,您必须创建一个配置文件$HOME/.config/sni-qt.conf包含以下内容:

[need-activate-action]
myapp=1

其中myapp是应用程序名称。

可以像这样使用activated信号:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        # ...
        self.tray_icon = QtWidgets.QSystemTrayIcon(QtGui.QIcon("icon.png"), self)
        self.tray_icon.activated.connect(self.on_systray_activated)
        # ...
    def on_systray_activated(self, i_activation_reason):
        # ...

这适用于 XFCE 4.12

文档:

  • http://doc.qt.io/qt-5/qsystemtrayicon.html#activated
  • http://doc.qt.io/qt-5/qsystemtrayicon.html#ActivationReason-enum

相关内容

  • 没有找到相关文章

最新更新