python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具

随着自己编写的脚本与安装的工具越来越多,电脑的桌面和文件夹也越来越乱了。

就在前几天因为一个不小心,我把自己的一个项目给删了,所以决定将电脑整理一下。

不过这一整理我很多脚本和工具的位置我就忘记了,所以决定写个小工具来快速启动一些常用的脚本或工具

这里选择Python是因为Python跨平台,这样我的Linux电脑也可以用了,而且简单。

注意:教程使用python3与PyQt5来编写

如果你用的是Python2.7可以借鉴本教程使用PyQt4来编写

0e7be22577ca

0e7be22577ca

1.准备

首先

安装PyQt5

pip3 install PyQt5

然后创建目录

新建一个文件夹用于存放项目

文件夹示例结构如下:

/main #主文件夹 名字自定义

├─main.pyw #主启动程序

├─conf.py #用于自定义菜单配置

├─/icons #用于存放图标 文件夹

└─/scripts #用于存放脚本 文件夹 可以省略

.pyw后缀的文件是指窗体应用程序默认是Python环境变量目录下的pythonw.exe文件如果打开方式是控制台程序,需要手动指定打开方式

2.代码

2.1.我们来创建个通知栏显示:

##############

## main.pyw ##

##############

from PyQt5.QtWidgets import QDialog, QSystemTrayIcon, QMenu ,QAction,QApplication

from PyQt5.QtGui import QIcon

import sys

class main(QDialog):

def __init__(self):

super().__init__()

self.loadMenu()

self.initUI()

def loadMenu(self):

menuItems = [] # 菜单列表

menuItems.append({"text": "启动", "icon": "./icons/set.png", "event": self.show, "hot": "D"})

menuItems.append({"text": "退出", "icon": "./icons/close.png", "event": self.close, "hot": "Q"})

self.trayIconMenu = QMenu(self)# 创建菜单

#遍历绑定 显示的文字、图标、热键和点击事件

#热键可能是无效的 我这里只是为了显示效果而已

for i in menuItems:

tmp = QAction(QIcon(i["icon"]), i["text"],self, triggered=i["event"])

tmp.setShortcut(self.tr(i["hot"]))

self.trayIconMenu.addAction(tmp)

def initUI(self):

self.trayIcon = QSystemTrayIcon(self) # <===创建通知栏托盘图标

self.trayIcon.setIcon(QIcon("./icons/menu2.png"))#<===设置托盘图标

self.trayIcon.setContextMenu(self.trayIconMenu)#<===创建右键连接菜单

self.trayIcon.show()#<====显示托盘

self.setWindowIcon(QIcon("./icons/menu2.png")) #<===设置窗体图标

self.setGeometry(300, 300, 180, 300) # <===设置窗体打开位置与宽高

self.setWindowTitle('窗体标题')

# self.show()#<====显示窗体

# self.hide()#<====隐藏窗体

# 默认不显示窗体

# 重写窗体关闭事件,让其点击关闭时隐藏

def closeEvent(self, event):

if self.trayIcon.isVisible():

self.trayIcon.hide()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = main()

sys.exit(app.exec_())

效果:

0e7be22577ca

2.2.如果通知栏显示成功后接下来的配置就十分简单了,只是绑定显示与事件就行了

##############

## conf.pyw ##

##############

import os

import time

def PrScrn():#调用 dll示例

time.sleep(0.5)

os.popen('rundll32 .\\script\\截图\\PrScrn.dll PrScrn')

def Open360Wifi():#打开应用程序示例

os.popen('"C:\\Program Files (x86)\\360\\360AP\\360AP.exe" /menufree')

def OpenRegedit():#调用 命令示例

os.popen('regedit')

def Ifconfig():

os.system('''ipconfig & pause''')

menuItems=[

#.....示例....

{"text":"截图","icon":"./icons/cut.png","event":PrScrn,"hot":"Alt+P"},

{"text":"360Wifi","icon":"./icons/wifi.png","event":Open360Wifi,"hot":"Alt+W"},

{"text":"注册表","icon":"./icons/regedit.png","event":OpenRegedit,"hot":"Alt+R"},

{"text":"ifconfig","icon":"./icons/ip.png","event":Ifconfig,"hot":"Alt+R"}

]

2.3.读取配置并显示

读取十分简单:

from PyQt5.QtWidgets import QDialog, QSystemTrayIcon, QMenu ,QAction,QApplication

from PyQt5.QtGui import QIcon

import sys

import conf#<====导入conf

class main(QDialog):

def __init__(self):

super().__init__()

self.loadMenu()

self.initUI()

def loadMenu(self):

menuItems =conf.menuItems #<=====菜单列表

#....略

#....略

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = main()

sys.exit(app.exec_())

2.4.将窗体利用起来

我这里就举个简单的例子:

from PyQt5.QtWidgets import QDialog, QAction, QApplication, QListWidget, QVBoxLayout, QSystemTrayIcon, QMenu, QListWidgetItem

from PyQt5.QtGui import QIcon

import sys

import conf

class main(QDialog):

def __init__(self):

super().__init__()

self.loadMenu()

self.initUI()

#省略.....

def loadList(self):

lv = QListWidget()

for i in range(len(conf.menuItems)):

itm = conf.menuItems[i]

if not 'icon' in itm.keys():

itm["icon"] = None

if not 'event' in itm.keys():

itm["event"] = self.show

if not 'hot' in itm.keys():

itm["hot"] = 'None'

qlv = QListWidgetItem(QIcon(itm["icon"]), self.tr(itm["text"]+" ("+itm["hot"]+")"))

qlv.event = itm["event"]

# qlv.clicked.connect(self.close)

lv.insertItem(i + 1, qlv)

lv.itemDoubleClicked.connect(self.dbclickItem)

self.layout.addWidget(lv)

def dbclickItem(self, item):

item.event()

#省略.....

#省略.....

效果:

0e7be22577ca

好了教程就到这里如果你是想开机自启的话可以将main.pyw创建快捷方式放入启动文件夹中

比如Windows10位置一般在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

完整代码在链接: https://pan.baidu.com/s/1mjBbpnM 密码: x6dr

关于截图可以参考:windows下实现快捷键截图小工具

顺便推荐另外一篇文章:windows 测试服务管理工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 圆 继承_java 类的继承(转)

这个星期主要是学习了Java中类的继承问题.继承就是由已有的类创建新类,通过子类继承父类的方法,实现一些功能.下面就是老师布置作业的其中一个:定义父类圆&#xff0c;通过继承&#xff0c;获得子类球、圆锥、圆柱&#xff0c;子类具有计算体积的功能。1)新建文件夹Test1&#…

java爬虫 京东_Java爬虫实现京东物流查询

网上没有免费的接口&#xff0c;只能自己写一套了&#xff0c;参考代码如下public static JSONObject getLastInfo(String no){JSONObject jsonObjectnew JSONObject();jsonObject.put("no", no);Connection connectionJsoup.connect("http://www.jdwl.com/orde…

java list stream avg_Java 8 Stream API中的多个聚合函数

要在没有自定义收集器的情况下执行此操作(不再对结果进行流式传输),您可以这样做.它有点脏,因为它首先收集到Map< String,List< TimePeriodCalc>>然后流式传输该列表并获得平均加倍.由于你需要两个平均值,它们被收集到一个Holder或一对,在这种情况下我使用的是Abst…

java 发送邮件昵称_利用JavaMail发送QQ邮件

一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件)&#xff0c;一封简单的邮件包含邮件头和邮件体两个部分&#xff0c;邮件头和邮件体之间使用空行分隔。邮件头包含的内容有&#xff1a;from字段   --用于指明发件人to字段    --用于指明收件…

java没有timer类_Java中的Java.util.Timer类 - Break易站

scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)在指定的延迟语法后开始&#xff0c;为重复的固定速率执行调度指定的任务&#xff1a;public void scheduleAtFixedRate(TimerT…

java select下拉标签_java中下拉框select和单选按钮的回显操作

前提&#xff1a;1.下拉框select请选择部门selected"selected">${department.department}2.单选按钮radio的回显checked"checked">checked"checked">补充知识&#xff1a;java使用apache commons-fileupload组件实现文件上传(控制文件上…

java 访问控制权限_Java访问控制权限有哪些?区别是什么?

原标题&#xff1a;Java访问控制权限有哪些&#xff1f;区别是什么?Java中的类和方法等都是有访问控制权限的&#xff0c;用来控制方法、类、属性等的生效范围&#xff0c;Java有四种访问控制权限&#xff0c;其中比较常用的就是public和private&#xff0c;今天华清远见Java学…

java 操作cursor数据库_Java连接各种数据库以及调用存储过程

准备工作&#xff1a;1. 创建表drop table T_TEST_PROCEDURE cascade constraints;/**//*Table: T_TEST_PROCEDURE*//**/createtable T_TEST_PROCEDURE (IDNUMBER(19) not null,NAMEVARCHAR2(40),AGE NUMBER(3),constraintPK_T_TEST_PROCEDURE primary key (ID));2. 创建存储过…

java 规格overview_《Java數據結構和算法》- OverView

Q: 不同數據結構的優缺點&#xff1f;數據結構優點缺點數組(Array)快速訪問&#xff0c;如果知道下標&#xff0c;就可以非常快地存取查找慢&#xff0c; 插入或刪除慢&#xff0c; 大小固定有序數組(OrderedArray)比無序的數組查找快插入或刪除慢&#xff0c;大小固定棧(Stack…

mysql 集群怎么卸载节点_Greenplum移除节点

基于某某原因&#xff0c;我们的Greenplum需要卸载一个节点(测试环境的Greenplum集群)&#xff0c;由于该集群使用了很久&#xff0c;里面有许多开发所需要的数据&#xff0c;所以在卸掉一个节点后&#xff0c;还要保证数据不会丢失。当然&#xff0c;期间也遇到了点问题&#…

mysql2012更改表名_T-SQL入門攻略之13-修改数据表

--> Title : T-SQL入門攻略之13-修改数据表--> Author : wufeng4552--> Date : 2010-07-12修改表名与字段名—sp_rename--1修改表名SQL Server不直接提供修改表名的T-SQL语句&#xff0c;但是可以通过存储过程实现语法格式&#xff1a;sp_rename tablename,newtabl…

python中不论类的名字是什么歌_Python自动猜歌名,还愁排名上不去嘛?

前言相传&#xff0c;就在前几日&#xff0c;在网上闲逛时&#xff0c;刷到了一个猜歌的小程序。这个小程序通过播放歌曲部分片段&#xff0c;然后让用户来猜它的歌名&#xff0c;大概是这样的&#xff1a;作为一个脑热的听歌爱好者&#xff0c;于是他越陷越深&#xff0c;越刷…

java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

一、需求传入一个参数&#xff0c;返回一条或多条记录(列表)。二、实现步骤1. 编写Oracle存储过程。-- 声明包和包体的语句应该分两次执行&#xff0c;即使声明在前定义在后&#xff0c;如果一起执行依然会编译出错--调用能够返回多条记录的存储过程需要定义在包内--声明包及包…

java 从控制台读取_转载 java从控制台读取输入的方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class MainClass { public static void method1() { //使用Scanner Scanner scannernew Sca…

trace java_使用java动态字节码技术简单实现arthas的trace功能。

参考资料用过[Arthas]的都知道&#xff0c;Arthas是alibaba开源的一个非常强大的Java诊断工具。不管是线上还是线下&#xff0c;我们都可以用Arthas分析程序的线程状态、查看jvm的实时运行状态、打印方法的出入参和返回类型、收集方法中每个代码块耗时&#xff0c;甚至可以监控…

顺时针小球圆周运动Java编程_如何使用CSS实现圆周运动小球的实例

我们时常在页面中见到一些动画效果&#xff0c;这些动画效果&#xff0c;很多可以仅通过CSS来实现。在这里我们用到了CSS3的animation属性。animation 属性是一个简写属性&#xff0c;用于设置六个动画属性&#xff1a;animation-name 规定需要绑定到选择器的 keyframe 名称。a…

java swing 外观框架_【GUI】一、Swing外观框架BeautyEye使用

一、Swing外观框架BeautyEye使用1.1 导包1.2 使用BeautyEye L&Fpublic static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {// 国人牛逼主题&#xff0c;值得学习// 初始化字体InitGlobalFont(new Font("微软雅黑", F…

static详解java_java中static作用详解

static表示“全局”或者“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;也可以形成静态static代码块&#xff0c;但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&…

java基础案例教程前4章知识点_java学习记录4 Java基础知识点

java学习记录4 Java基础知识点1. 注释单行注释使用“//”开头&#xff0c;后面是注释的内容一般在要注释的语句的上面加注释多行注释以“/*”开头&#xff0c;以“*/”结尾可以做行内注释不可嵌套使用文档注释以“/**”开头&#xff0c;以“*/”结尾用来给类和方法做注释&#…

打印狗的健康值Java_嵌入式狗的JAVA之路 HTML 补课

学了JAVA WEB应用&#xff0c;补充一下HTML的标签&#xff0c;常用的&#xff0c;不然页面都画不出来了~~test 标题&#xff0c;h1h2h3 3个字号test 段落link 链接 使用 Target 属性&#xff0c;你可以定义被链接的文档在何处显示。下面的这行会在新窗口打开文档&#xff1a;Vi…