随着自己编写的脚本与安装的工具越来越多,电脑的桌面和文件夹也越来越乱了。
就在前几天因为一个不小心,我把自己的一个项目给删了,所以决定将电脑整理一下。
不过这一整理我很多脚本和工具的位置我就忘记了,所以决定写个小工具来快速启动一些常用的脚本或工具
这里选择Python是因为Python跨平台,这样我的Linux电脑也可以用了,而且简单。
1.准备
首先
安装PyQt5
pip3 install PyQt5
然后创建目录
新建一个文件夹用于存放项目
文件夹示例结构如下:
/main #主文件夹 名字自定义
├─main.pyw #主启动程序
├─conf.py #用于自定义菜单配置
├─/icons #用于存放图标 文件夹
└─/scripts #用于存放脚本 文件夹 可以省略
.pyw后缀的文件是指窗体应用程序默认是Python环境变量目录下的pythonw.exe文件如果打开方式是控制台程序,需要手动指定打开方式
关于图标可以前往http://www.iconfont.cn/下载
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_())
效果:
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()
#省略.....
#省略.....
效果:
好了教程就到这里如果你是想开机自启的话可以将main.pyw创建快捷方式放入启动文件夹中
比如Windows10位置一般在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
完整代码在链接: https://pan.baidu.com/s/1mjBbpnM 密码: x6dr
关于截图可以参考:windows下实现快捷键截图小工具