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
分享到:
相关推荐
Qt/PyQt无法连接数据库问题解决所需的两个dll文件
PyQt快速开发与实战电子书并非源码。交流学习使用。资源来自于网络,如有侵权立即删除。
资源分类:Python库 所属语言:Python 资源全名:QT-PyQt-PySide-Custom-Widgets-0.1.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Opencv/PyQt-鼠标控制界面(二)
Opencv/PyQt——鼠标控制界面(一)
主要为大家详细介绍了pyqt5利用pyqtDesigner实现登录界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...
最近利用pyqt5写了一个小工具,想像微信一样可以在系统托盘驻留,并具备全局热键唤出、ESC键隐藏等功能,下面利用一个简单的UI界面来记录一下实现的过程 基本思路 利用QtDesigner制作UI界面; QSystemTrayIcon制作...
一款可以缩小到托盘图标的桌面应用代码实例,无加密,代码注释清晰,可以帮助你快速实现一个可以最小化到任务栏,通知区的桌面应用。 你可以用它: 1.制作自己的桌面应用软件【支持关闭后最小化到托盘,点击托盘...
http://www.riverbankcomputing.com/software/pyqt/intro 它由 Phil Thompson 创建。 PyQt 的实现被视作 Python 的一个模块。它由 300 多个类和接近 6000 个函数与方法构 成。作为一个跨平台的工具包, PyQt 可以在...
PyQt是Python语言和Qt库的成功融合。 偶然找到的这个版本, ubuntu16.04安装成功,对应Qt 5.9.0 sip 4.19.3 其他版本不保证
PyQt5: 程序入口添加 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) Qt5: 程序入口添加 ... 您可能感兴趣的文章:PyQt5 实现字体大小自适应分辨率的方法pyqt5 获取显示
适合初学者或多年开发者参考
PyQt5-QWidgets部件进阶教程之图标的相关资源
oracle-jmesdk-8-0-rr-nb-plugins.zip
pythonqt5教程从零开始_pyQt5QtDesigner简易⼊门教程 python3.6 & pyQt5 & QtDesigner 简易⼊门教程 1. python 官⽹下载安装python3.6并配置好环境; 2.cmd下 运⾏: pip install PyQt5 安装PyQt库; 3.cmd下运⾏: ...
PyQt5系列教程(二)利用QtDesigner设计UI界面源码包,博文地址http://blog.csdn.net/djstavaV/article/details/50282527
pytest-qt, 用于 Qt ( PyQt4,PyQt5和 PySide ) 应用程序测试的pytest插件 pytest-qtpytest-qt是一个支持程序员为 PySide,PySide2和 PyQt的应用程序编写测试的 pytest插件插件。主要用途是使用 qtbot fixture,负责...
本书共分四个部分:第一部分主要讲述Python基础知识,第二部分通过三个例子给出PyQt GUI应用程序的初步印象,第三部分深入讲述窗口部件布局、事件处理、窗口部件子类化、Qt图形架构和Qt的模型/视图等内容,第四部分...