`
izuoyan
  • 浏览: 9206192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt/PyQt的系统托盘图标(SystemTrayIcon)实现

阅读更多

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件

估计这种小的知识会有几篇文章,除了全局快捷键部分外,其他的都比较简单,都是我实现“onekeycodehighlighter" 中碰到的一些小问题,这里顺面整理一下。事实上,稍微懂一点的人,去看看one key code highlighter的源代码都能明白了。这里相当于将其详细的剖析一下。。。。。。。另外,实现上用Python+PyQt,事实上,主要的部分是对Qt的一些类的使用,所以其实看懂了C++的Qt中使用上是一样的。啥?你看不懂Python?好的,这就是我为什么靠C++吃饭,却学习JAVA,JavaScript,Lua,Python,Bash的一个原因,不然你看不懂别人在写啥-_-!(当然,我基本上也就学到能看懂)
对于pyQt完全不懂的,这里也不用看了,《pyqt 的学习(1) 入门 》,《pyqt (2) 对话框... 》可以看看,但是写的有点乱,因为那时候我懂得也少(不代表现在就懂的多了)

SystemTrayIcon在官方的Demo中有一个示例,(那些示例有些可真酷啊!)位置在Desktop->System Tray中。该示例展示了大部分需要用到的内容。包括实现TrayIcon,显示气泡信息,TrayIcon的菜单等等。

创建系统系统托盘图标(TrayIcon)

主要用到的类是QtGui.QSystemTrayIcon。
图标用QtGui.QIcon类来表示,可以以文件名字符串为构造函数的参数。如:
icon = QtGui.QIcon('jt.png ')
然后用QtGui.QSystemTrayIcon的 setIcon(icon) 去完成系统TrayIcon的创建。OK,已经完成80%了,图标已经出来了。

气泡信息

再然后呢?希望有特定的气泡信息?
QtGui.QSystemTrayIcon的showMessage
可以完成。

菜单

再然后呢?希望有菜单?这个稍微复杂点,在Qt中,菜单是一个一个的Action,如下建立Action:

self.quitAction = QtGui.QAction("&Quit ", self,
triggered=QtGui.qApp.quit)

self.aboutAction = QtGui.QAction("&About ", self,
triggered=self.about)
注意上述Action的triggerd参数,实际上是一个Callable的回调函数,意思是点击此菜单时进行的操作。
然后将Action添加进某个Menu

self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.aboutAction)
self.trayIconMenu.addAction(self.quitAction)
然后将Menu
关联上TrayIcon
self.trayIcon.setContextMenu(self.trayIconMenu)

完成了。

CheckBox菜单

我的需求更加复杂一点,希望有可以Check的菜单,当然,这个需求已经超出SystemTrayIcon相关的需求了,与Qt中的菜单有关。

将需要实现成Check菜单的所有命令添加到一个Action组中,在Qt中称为QActionGroup。


self.synGroup = QtGui.QActionGroup(self)

for syn in config.syntaxSupport:
action = QtGui.QAction(syn, self, checkable=True,
triggered=self.setSyn)
self.synGroup.addAction(action)

需要注意的是,每个Action的checkable参数设为True,表示是CheckBox类型的菜单。
通过某个Action的setChecked来选中,比如:

actions = self.synGroup.actions()
if len(actions) != 0:
actions[0].setChecked(True)

主要注意的是,在Qt中QActionGroup返回的是一个QList的列表,但是在PyQt已经将其转换为Python中原生的list了,这样更加符合Python的使用习惯,当然,调用方法的时候也需要注意一下了,接口可是不同的,感谢RiverBank(PyQt的创造维护公司)伟大的工作,对于可怜的RiverBank我其实还有话要说,以后再详述吧。
具体哪个菜单选项被Check了,通过
checkedAction = self.synGroup.checkedAction()
来查询,返回的是被Check的Action,此时假如你是通过Action的字符串来查询的话,(比如我)那么调用Action的text
函数获取。

一切都结束了。。。。。。。需要注意几个特别的地方:
1。官方的教程中,有
QtGui.QApplication.setQuitOnLastWindowClosed(False)
这样一句,大概的意思是在应用程序所有窗口都关闭的时候不关闭应用程序,事实上,就我试验,无论是设为True,还是False,都不管关。。。。。。原因不明。
2。在应用程序利用QtGui.qApp.quit关闭后,TrayIcon其实还不会自动消失,直到你的鼠标移动到上面去后,才会消失,这是个问题,(如同你terminate一些带TrayIcon的应用程序时出现的状况),这种问题的解决我是通过在程序退出前将其setVisible(False)来完成的。

完整源代码获取说明

由于篇幅限制,本文一般仅贴出代码的主要关心的部分,代码带工程(或者makefile)完整版(如果有的话)都能用Mercurial在Google Code中下载。文章以博文发表的日期分目录存放,请直接使用Mercurial克隆下库:

https://onekeycodehighlighter.googlecode.com/hg/

Mercurial使用方法见《分布式的,新一代版本控制系统Mercurial的介绍及简要入门

要是仅仅想浏览全部代码也可以直接到google code上去看,在下面的地址:

http://code.google.com/p/onekeycodehighlighter/source/browse/

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

分享到:
评论

相关推荐

    《Qt5 PyQt 5实战指南-手把手教你掌握100个精彩案例》.rar

    《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》 《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》 《Qt5 PyQt 5实战指南—手把手教你掌握100个精彩案例》

    Qt/PyQt无法连接数据库问题解决所需的两个dll文件

    在使用Qt或PyQt进行应用程序开发时,数据库连接是常见的需求。Qt库提供了一个强大的数据库模块,名为Qt SQL,使得开发者能够轻松地与各种数据库系统交互。然而,在某些情况下,尤其是在Windows平台上,可能会遇到...

    基于C++Qt/PyQt/PySide的流畅设计小部件库 让Qt再次伟大

    基于 PyQt5 的 Fluent Design 风格组件库

    PyQt快速开发与实战(非源码)

    PyQt是Python中用于构建GUI应用程序的一个强大工具包,它基于Qt框架,并由Riverbank Computing开发维护。PyQt支持多个版本,其中PyQt5是最常用且最新的版本之一。通过PyQt5,开发者能够利用其丰富的组件库来构建跨...

    Python库 | QT-PyQt-PySide-Custom-Widgets-0.1.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:QT-PyQt-PySide-Custom-Widgets-0.1.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    pyqt5利用pyqtDesigner实现登录界面

    ### PyQt5结合PyQtDesigner实现登录界面详解 #### 一、引言 在现代软件开发过程中,GUI(图形用户界面)的设计与实现是一项至关重要的任务。PyQt5作为Python的一个强大的GUI工具包,允许开发者创建出功能丰富且美观...

    Opencv/PyQt-鼠标控制界面(二)

    Opencv/PyQt-鼠标控制界面(二)

    Opencv/PyQt-鼠标控制界面(一)

    Opencv/PyQt——鼠标控制界面(一)

    PyQt 图解Qt Designer工具的使用方法

    Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...

    利用pyqt5实现常驻Windows系统托盘并利用全局热键唤出的程序

    最近利用pyqt5写了一个小工具,想像微信一样可以在系统托盘驻留,并具备全局热键唤出、ESC键隐藏等功能,下面利用一个简单的UI界面来记录一下实现的过程 基本思路 利用QtDesigner制作UI界面; QSystemTrayIcon制作...

    python+pyqt制作的可最小化到托盘的桌面图形应用代码实例

    一款可以缩小到托盘图标的桌面应用代码实例,无加密,代码注释清晰,可以帮助你快速实现一个可以最小化到任务栏,通知区的桌面应用。 你可以用它: 1.制作自己的桌面应用软件【支持关闭后最小化到托盘,点击托盘...

    PyQt5-QWidgets部件进阶教程之图标资源

    icon = QIcon('path/to/icon.png') ``` 2. **设置QWidget部件的图标**:一旦图标被加载,就可以将其应用于各种QWidgets。例如,为QPushButton设置图标: ```python button = QPushButton() button.setIcon(icon) ...

    PyQt5_gpl-5.9.tar.gz

    这个特定的版本"PyQt5_gpl-5.9.tar.gz"对应于Qt 5.9.0和sip 4.19.3,适用于Ubuntu 16.04操作系统。值得注意的是,虽然在这个系统上可以顺利安装并运行,但其他版本的Python、Qt或操作系统可能需要不同的配置步骤,...

    《PYTHON QT GUI快速编程 PYQT编程指南》高清完整PDF版下载

    本书共分四个部分:第一部分主要讲述Python基础知识,第二部分通过三个例子给出PyQt GUI应用程序的初步印象,第三部分深入讲述窗口部件布局、事件处理、窗口部件子类化、Qt图形架构和Qt的模型/视图等内容,第四部分...

    好用的png图标 可以作为系统托盘

    例如,使用C#的.NET Framework时,可以利用`System.Drawing.Icon`类加载PNG图标,而在Python中,可以使用`PyQt`或`wxPython`等GUI库来处理PNG图标。 在设计和使用PNG图标时,需要注意几个要点:保持图标风格一致,...

    python+qt+PyQt5+全套示例代码+精心整理+含代码注释

    - `Tetris.py`:这是一个基于PyQt5实现的俄罗斯方块游戏,展示了如何创建窗口、布局管理、事件处理以及自定义控件的绘制。通过这个例子,你可以了解QGraphicsView和QGraphicsItem类,以及如何使用它们来实现动态...

    PyQt5系列教程(二)利用QtDesigner设计UI界面源码包

    6. **跨平台兼容**:由于PyQt5基于Qt库,所以创建的UI界面可以无缝地运行在Windows、macOS和Linux等不同操作系统上,这得益于Qt的跨平台特性。 总结一下,本教程的重点在于掌握QtDesigner的设计技巧以及如何将其与...

    Python Qt GUI快速编程--PyQt编程指南

    http://www.riverbankcomputing.com/software/pyqt/intro 它由 Phil Thompson 创建。 PyQt 的实现被视作 Python 的一个模块。它由 300 多个类和接近 6000 个函数与方法构 成。作为一个跨平台的工具包, PyQt 可以在...

    教你怎么样把程序最小化到托盘

    系统托盘,通常位于操作系统界面的右下角,包含许多图标,用户可以通过这些图标与后台运行的应用程序进行交互。在本文中,我们将深入探讨如何实现这一功能,以“教你怎么样把程序最小化到托盘”为主题,主要针对...

    在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法

    PyQt5: 程序入口添加 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) Qt5: 程序入口添加 ... 您可能感兴趣的文章:PyQt5 实现字体大小自适应分辨率的方法pyqt5 获取显示

Global site tag (gtag.js) - Google Analytics