首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XFCE和Qt:在systray上左键单击什么也不做

XFCE和Qt:在systray上左键单击什么也不做
EN

Stack Overflow用户
提问于 2017-10-08 05:29:27
回答 2查看 460关注 0票数 0

背景

我正在用PyQt5开发一个使用系统托盘的应用程序。我已经在LXDE上尝试过这个应用程序,在系统托盘图标上单击鼠标左键会显示菜单(右击由LXDE处理)。我的一个运行XFCE的朋友现在也尝试过这个应用程序,但对他来说,当用鼠标左键单击系统托盘图标时,什么也不会发生,以查看他必须右键单击的菜单

问题

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

设置

Qt版本: 5.7.1

代码

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2017-10-08 16:03:17

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

代码语言:javascript
运行
复制
[need-activate-action]
myapp=1

其中myapp是您的应用程序名称。

票数 0
EN

Stack Overflow用户

发布于 2017-10-27 08:47:51

可以像这样使用activated信号:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46625306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档