隨著自己編寫的腳本與安裝的工具越來越多,電腦的桌面和文件夾也越來越亂了。
就在前幾天因為一個不小心,我把自己的一個項目給刪了,所以決定將電腦整理一下。
不過這一整理我很多腳本和工具的位置我就忘記了,所以決定寫個小工具來快速啟動一些常用的腳本或工具
這里選擇Python是因為Python跨平臺,這樣我的Linux電腦也可以用了,而且簡單。
注意:教程使用python3與PyQt5來編寫
如果你用的是Python2.7可以借鑒本教程使用PyQt4來編寫
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_())
效果:
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下實現快捷鍵截圖小工具
順便推薦另外一篇文章:windows 測試服務管理工具