PYQT4 : QSystemTrayIcon练习
照着demo自己做了一遍,练练手
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class SysTray(QtGui.QDialog):
def __init__(self, parent=None):
super(SysTray, self).__init__(parent)
self.createIconGroupBox()
self.createMessageGroupBox()
self.createActions()
self.createSysTray()
mainLayout = QtGui.QVBoxLayout()
mainLayout.addWidget(self.iconGroupBox)
mainLayout.addWidget(self.messageGroupBox)
self.setLayout(mainLayout)
self.showMessageButton.clicked.connect(self.showMessage)
self.iconCheckBox.stateChanged.connect(self.showIcon)
# 即时刷新Tray Icon
self.iconComboBox.currentIndexChanged.connect(self.setIcon)
self.iconComboBox.setCurrentIndex(1)
self.trayIcon.activated.connect(self.iconActivated)
self.trayIcon.show()
self.resize(400, 300)
self.setWindowTitle("Systray")
def setIcon(self, index):
icon = self.iconComboBox.itemIcon(index)
self.trayIcon.setIcon(icon)
self.setWindowIcon(icon)
self.trayIcon.setToolTip(self.iconComboBox.itemText(index))
def showIcon(self, i):
# Unchecked:i=0 Checked=2
if i == QtCore.Qt.Unchecked:
self.trayIcon.hide()
else:
self.trayIcon.show()
def iconActivated(self, reason):
# 切换图标
if reason in (QtGui.QSystemTrayIcon.Trigger, QtGui.QSystemTrayIcon.DoubleClick):
max = self.iconComboBox.count()
current = self.iconComboBox.currentIndex() + 1
if current == max:
current = 0
self.iconComboBox.setCurrentIndex(current)
def showMessage(self):
icon = self.typeComboBox.itemData(self.typeComboBox.currentIndex())
self.trayIcon.showMessage(self.titleLine.text(), self.bodyText.toPlainText(), icon, self.durationSpin.value())
def closeEvent(self, event):
# 重新定义“X”动作,如果iconCheckBox unchecked 就关闭窗口
if self.trayIcon.isVisible():
QtGui.QMessageBox.information(self, "SysTray",
"The program will keep running in the system tray. To "
"terminate the program, choose <b>Quit</b> in the "
"context menu of the system tray entry.")
self.hide()
event.ignore()
def createActions(self):
self.minimizeAction = QtGui.QAction("Mi&nimize", self, triggered=self.showMinimized)
self.maximumAction = QtGui.QAction("Ma&ximum", self, triggered=self.showMaximized)
self.restoreAction = QtGui.QAction("&Restore", self, triggered=self.showNormal)
self.quitAction = QtGui.QAction("&Quit", self, triggered=QtGui.qApp.quit)
def createSysTray(self):
self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.minimizeAction)
self.trayIconMenu.addAction(self.maximumAction)
self.trayIconMenu.addAction(self.restoreAction)
self.trayIconMenu.addSeparator()
self.trayIconMenu.addAction(self.quitAction)
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setContextMenu(self.trayIconMenu)
def createIconGroupBox(self):
self.iconGroupBox = QtGui.QGroupBox('Tray Box')
self.iconLabel = QtGui.QLabel('Icon: ')
self.iconComboBox = QtGui.QComboBox()
self.iconComboBox.addItem(QtGui.QIcon('resource/heart.svg'), 'heart')
self.iconComboBox.addItem(QtGui.QIcon('resource/trash.svg'), 'trash')
self.iconComboBox.addItem(QtGui.QIcon('resource/bad.svg'), 'bad')
self.iconCheckBox = QtGui.QCheckBox('Show Icon')
self.iconCheckBox.setChecked(True)
iconLayout = QtGui.QHBoxLayout()
iconLayout.addWidget(self.iconLabel)
iconLayout.addWidget(self.iconComboBox)
iconLayout.addStretch()
iconLayout.addWidget(self.iconCheckBox)
self.iconGroupBox.setLayout(iconLayout)
def createMessageGroupBox(self):
self.messageGroupBox = QtGui.QGroupBox('Ballon Message')
self.typeLabel = QtGui.QLabel('Type: ')
#addItem (QString, QVariant)
#addItem (QIcon, QString, QVariant)
#QVariant QComboBox.itemData(int)
#这里的QVariant很重要,保存了大量大数据类型
self.typeComboBox = QtGui.QComboBox()
self.typeComboBox.addItem("None", QtGui.QSystemTrayIcon.NoIcon)
self.typeComboBox.addItem(
self.style().standardIcon(QtGui.QStyle.SP_MessageBoxInformation), 'Informathion',
QtGui.QSystemTrayIcon.Information)
self.typeComboBox.addItem(
self.style().standardIcon(QtGui.QStyle.SP_MessageBoxWarning), 'Warniing', QtGui.QSystemTrayIcon.Warning)
self.typeComboBox.addItem(
self.style().standardIcon(QtGui.QStyle.SP_MessageBoxCritical), 'Critical', QtGui.QSystemTrayIcon.Critical)
self.typeComboBox.setCurrentIndex(1)
self.durationLabel = QtGui.QLabel('Duration: ')
self.durationSpin = QtGui.QSpinBox()
self.durationSpin.setSuffix('s')
self.durationSpin.setRange(5, 15)
self.durationDescLabel = QtGui.QLabel('some systems might ignore this hint')
self.titleLabel = QtGui.QLabel('Title')
self.titleLine = QtGui.QLineEdit('Cannot connect to network')
self.bodyLabel = QtGui.QLabel('Body: ')
self.bodyText = QtGui.QTextEdit()
self.bodyText.setPlainText("Don't believe me. Honestly, I don't have "
"a clue.\nClick this balloon for details.")
self.showMessageButton = QtGui.QPushButton('Show Message')
self.showMessageButton.setDefault(True)
messageGroupLayout = QtGui.QGridLayout()
messageGroupLayout.addWidget(self.typeLabel, 0, 0)
messageGroupLayout.addWidget(self.typeComboBox, 0, 1, 1, 2)
messageGroupLayout.addWidget(self.durationLabel, 1, 0)
messageGroupLayout.addWidget(self.durationSpin, 1, 1)
messageGroupLayout.addWidget(self.durationDescLabel, 1, 2, 1, 3)
messageGroupLayout.addWidget(self.titleLabel, 2, 0)
messageGroupLayout.addWidget(self.titleLine, 2, 1, 1, 4)
messageGroupLayout.addWidget(self.bodyLabel, 3, 0)
messageGroupLayout.addWidget(self.bodyText, 3, 1, 2, 4)
messageGroupLayout.addWidget(self.showMessageButton, 5, 4)
# 设置拉伸的基准
messageGroupLayout.setColumnStretch(3, 1)
messageGroupLayout.setRowStretch(4, 1)
self.messageGroupBox.setLayout(messageGroupLayout)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
tray = SysTray()
tray.show()
sys.exit(app.exec_())

PYQT4 : QSystemTrayIcon练习的更多相关文章
- Pyqt QSystemTrayIcon 实现托盘效果
pyqt的托盘效果很好实现,在Pyqt的demo中有个例子 路径:PyQt4\examples\desktop\systray.py 今天我就仿这个Tray效果做效果 一. 创建UI trayicon ...
- pyqt4制作透明无边框窗体
用PyQt做了一个无边框登陆窗口,效果如下: 下面是代码: # -*- coding: utf-8 -*- from PyQt4 import QtGui ,Qt ,QtCore image=QtGu ...
- PyQt4 初试牛刀二
一.最小话托盘后,调用showNormal()后窗口不刷新,解决办法如下: 重写showNormal 方法,调用父类方法后,repaint窗体 def showNormal(self): su ...
- 用 pyqt4 编写的一个翻译小工具
有时候我们在开发时遇到一些陌生的英文单词或者不容易看出某些长句的中文意思时该怎么办呢?打开桌面上的翻译软件?打开浏览器里收藏着的翻译网址或者直接贴上百度的搜索框去查?这些方法固然可以,还很常见,但如果 ...
- PyQt4入门学习笔记(五)
PyQt4里的对话框 对话框是大多数GUI应用中不可分割的一部分.一个对话框是两者或多者的会话.在GUI内,对话框是应用向人说话的方式.一个对话框可以用来输入数据,修改数据,改变应用设置等等. QtG ...
- PyQt4入门学习笔记(四)
在PyQt4中的事件和信号 事件 所有的GUI应用都是事件驱动的.事件主要是来自于应用的使用者,但是像互联网连接,窗口管理器或者计时器也可以产生事件.当我们调用应用的exec_()方法时,应用就进入了 ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- 基于傅里叶变换和PyQt4开发一个简单的频率计数器
小学期的<信号与系统>课,要求写一个频率计数器,下面是我个人理解的频率计数 傅里叶变换的代码: # coding=utf-8 import numpy as np from scipy.i ...
- PyQt4入门学习笔记(二)
之前第一篇介绍了pyqt4的大小,移动位置,消息提示.这次我们介绍菜单和工具栏 QtGui.QmainWindow这个类可以给我们提供一个创建带有状态栏.工具栏和菜单栏的标准的应用. 状态栏 状态栏是 ...
随机推荐
- linux常用的监控命令
转自:http://www.cnblogs.com/huangxm/p/6278615.html 1. top 显示所有正在运行而且处于活动状态的实时进程, 而且会定期更新显示结果:它显示了CPU使 ...
- CentOS-7.2添加桌面快捷方式
一,在桌面新建一个文件 文件名随意,但必须带有.desktop的后缀名. gedit /home/zgw/Desktop/zgw.desktop 二,在文件中写入如下内容 [Desktop Entry ...
- Tomcat启动中的一些问题
(a)在eclipse中启动tomcat,在控制台加载的配置却是其他项目的,有时候也不是自己工作空间里的? 出现的一个原因是:在我tomcat的webapp目录下,我放了一个其他项目的war包,在to ...
- jsp EL表达式和JSTL标签if-else if-else用法
java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法一.条件运算符 ${user.gender==?'男':'女'} 二.if() <c:if ...
- 腾讯 AlloyCrop 1.0 发布
写在前面 AlloyCrop 这个项目是8个月前发布的,作为AlloyFinger 的典型案例,发布之后被BAT等其他公司广泛使用.但是发布之后,有两个问题一直没有抽出时间去解决: 裁剪图像的分辨率太 ...
- ICMP--ping--Traceroute
ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息. ICMP报文通常被IP层或更高层协议TCP或UDP使用. 一些ICMP报文把差错报文返回给用户进程 ICMP报文是 ...
- Linux(5)压缩和归档管理
压缩和归档管理 tar :归档管理 此命令可以把一系列文件归档到一个大文件中, 使用格式: -v :显示进度 -f :指定文件名称, f后面一定是.tar文件, 此参数必须放在选项最后 -t :列出文 ...
- 拓扑排序下的有无环判定 STL方法
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<se ...
- java中方法调用
JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @p ...
- css小随笔(二)与通用样式
51先在学校HTML5已经有半个多月了,然后这个星期做了一个京东的手机网站,接触到了通用样式,下面以京东的手机站为例 这两个就是京东手机站了的不同的两个板块,因为HTML5仅仅只是学完了基本标签跟cs ...