首先
安裝PyQt5
pip3 install PyQt5
然后創(chuàng)建目錄
新建一個文件夾用于存放項目
文件夾示例結(jié)構(gòu)如下:
/main #主文件夾 名字自定義├─main.pyw #主啟動程序├─conf.py #用于自定義菜單配置├─/icons #用于存放圖標(biāo) 文件夾└─/scripts #用于存放腳本 文件夾 可以省略
.pyw后綴的文件是指窗體應(yīng)用程序默認是Python環(huán)境變量目錄下的pythonw.exe文件如果打開方式是控制臺程序,需要手動指定打開方式
關(guān)于圖標(biāo)可以前往http://www.iconfont.cn/下載
2.代碼
2.1.我們來創(chuàng)建個通知欄顯示:
################ main.pyw ################from PyQt5.QtWidgets import QDialog, QSystemTrayIcon, QMenu ,QAction,QApplication from PyQt5.QtGui import QIcon import sysclass 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)# 創(chuàng)建菜單 #遍歷綁定 顯示的文字、圖標(biāo)、熱鍵和點擊事件 #熱鍵可能是無效的 我這里只是為了顯示效果而已 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) # <===創(chuàng)建通知欄托盤圖標(biāo) self.trayIcon.setIcon(QIcon("./icons/menu2.png"))#<===設(shè)置托盤圖標(biāo) self.trayIcon.setContextMenu(self.trayIconMenu)#<===創(chuàng)建右鍵連接菜單 self.trayIcon.show()#<====顯示托盤 self.setWindowIcon(QIcon("./icons/menu2.png")) #<===設(shè)置窗體圖標(biāo) self.setGeometry(300, 300, 180, 300) # <===設(shè)置窗體打開位置與寬高 self.setWindowTitle('窗體標(biāo)題') # self.show()#<====顯示窗體 # self.hide()#<====隱藏窗體 # 默認不顯示窗體 # 重寫窗體關(guān)閉事件,讓其點擊關(guān)閉時隱藏 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 osimport timedef PrScrn():#調(diào)用 dll示例 time.sleep(0.5) os.popen('rundll32 .\\script\\截圖\\PrScrn.dll PrScrn')def Open360Wifi():#打開應(yīng)用程序示例 os.popen('"C:\\Program Files (x86)\\360\\360AP\\360AP.exe" /menufree')def OpenRegedit():#調(diào)用 命令示例 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,QApplicationfrom PyQt5.QtGui import QIconimport sysimport conf#<====導(dǎo)入confclass 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 confclass 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() #省略..... #省略.....
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注Gxl網(wǎng)其它相關(guān)文章!
相關(guān)閱讀:
如何使用canvas來制作好用的涂鴉畫板
如何使用s-xlsx之合并單元格
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com