【问题标题】:XFCE and Qt: Left-clicking on systray does nothingXFCE 和 Qt:左键单击系统托盘没有任何作用
【发布时间】:2017-10-07 21:29:26
【问题描述】:

背景

我正在 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)

【问题讨论】:

    标签: qt pyqt qt5 system-tray xfce


    【解决方案1】:

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

    [need-activate-action]
    myapp=1
    

    myapp 是您的应用程序名称。

    【讨论】:

    • 先生,对不起,我在这里发表评论,这条评论是关于stackoverflow.com/questions/46813590/…这个问题的,如果可以的话,请帮助我先生,您之前的答案已被删除,我没有任何其他方式可以联系您,这就是我在这里发表评论的原因,所以请帮助我,谢谢
    【解决方案2】:

    可以像这样使用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

    文档:

    【讨论】:

    • 我认为这个解决方案很好,但事实证明它会在 MacOS 上为self.tray_icon.activated.connect(self.on_systray_activated) 行引起问题(给出Abort trap: 6)所以我不能推荐它
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多