importsys
从PyQt库中导入Qt构件公共窗口类。 基本窗口总结在pyqt5. Qt构件模块中。
from pyqt5. qtwidgetsimportqapplication,q构件,QSystemTrayIcon,QAction,QMenu,qapp,QMessageBox
fromPyQt5.QtGuiimportQIcon
from pyqt5. qtcoreimportqcoreapplication
if__name__=='__main__':
#pyqt窗口必须在QApplication方法中使用
#每个pyqt5APP应用程序都必须创建一个APP应用程序对象。 sys.argv参数是来自命令行的参数列表。 Python脚本可以从shell运行。 这是如何控制我们脚本的执行的一种方法。
APP=qapplication (sys.argv ) )。
#关闭所有窗口,也不关闭APP应用程序
q pplication.setquitonlastwindowclosed (false ) )。
来自pyqt5importqtwidgets
# q构件窗口是PyQt5中所有用户界面对象的基类。 我使用了q构件的默认构造函数。 缺省构造函数没有父类。 没有父类的窗口称为窗口。
w=q小部件() )
#resize (方法调整窗口的大小。 调整为宽250像素、高250像素。
w.resize (250,250 ) )。
#move (方法将窗口移动到屏幕坐标x=300,y=300的位置。
w.move (300,300 ) )。
这里设定了窗口的标题。 标题显示在标题栏中。
w.setwindowtitle(simple ) )。
#show ) )方法在屏幕上显示窗口。 一个窗口首先在内存中创建,然后在屏幕上显示。
w.show () )
# from pyqt5. qtwidgetsimportqsystemtrayicon
#fromPyQt5.QtGuiimportQIcon
#在系统托盘中显示图标
TP=qsystemtrayicon(w )
TP.seticon(qicon ) './徽标. png ' ) )
#用于设置系统托盘图标的菜单
a1=QAction (显示) Show ),triggered=w.show ) )。
defquitapp(:
w.show(#w.hide ) #隐藏
re=qmessagebox.question(w,“提示”,“系统退出”,QMessageBox.Yes|
QMessageBox.No,QMessageBox.No )
ifre==QMessageBox.Yes:
#关闭表单程序
QCoreApplication.instance ().quit ) )。
#关闭所有APP后,TrayIcon实际上还没有自动消失。
#在你的鼠标向上移动之前不会消失。
#这是个问题。 (就像你有terminate的几个带TrayIcon的APP应用程序时发生的情况一样) )、
#此问题是通过在退出程序之前运行setvisible(false )解决的。
TP.setvisible(false ) )。
a2=qaction('exit ),triggered=quitApp ) #要直接退出,请使用qApp.quit
tpMenu=QMenu ()
TPmenu.addaction(A1 ) )。
TPmenu.addaction(A2 ) )。
TP.set上下文菜单(TP menu ) )。
如果不调用show,则不显示系统托盘
tp.show () )
#信息提示
#参数1 :标题
#参数2 :内容
#参数3 :图标(0没有图标1信息图标2警告图标3错误图标),0还有小图标
TP.showmessage(TP )、TP content (icon=0) )。
def消息(:
print ('单击了弹出消息) )
TP.message clicked.connect (message )
de fact (读) :
用鼠标单击icon时,会传递一个格式化值: 1是右键单击,2是双击,3是左键单击,4是鼠标中键单击
ifreason==2orreason==3:
w.show () )
#pr
int("系统托盘的图标被点击了")# 系统托盘图标 双击 显示 隐藏窗口self.system_tray.show() # 显示系统托盘
self.system_tray.activated[QSystemTrayIcon.ActivationReason].connect(self.iconActivated)
def iconActivated(self, reason):
if reason == QSystemTrayIcon.DoubleClick:
if self.isHidden():
self.show()
else:
self.hide()
附:在实际项目中的使用def iconActivated(self,reason):
if reason == QSystemTrayIcon.DoubleClick:
if self.isHidden():
self.show()
else:
self.hide()
def quit(self,tray):
#self.hide() #隐藏
re = QMessageBox.question(self, "提示", "退出系统", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if re == QMessageBox.Yes:
# 关闭窗体程序
QApplication.instance().quit()
# 在应用程序全部关闭后,TrayIcon其实还不会自动消失,
# 直到你的鼠标移动到上面去后,才会消失,
# 这是个问题,(如同你terminate一些带TrayIcon的应用程序时出现的状况),
# 这种问题的解决我是通过在程序退出前将其setVisible(False)来完成的。
tray.setVisible(False)
def closeEvent(self, e):
self.hide()
e.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
# 关闭所有窗口,也不关闭应用程序
# QApplication.setQuitOnLastWindowClosed(False)
action = Action()
action.show()
from PyQt5.QtWidgets import QSystemTrayIcon,QMenu,QAction
tray = QSystemTrayIcon()
tray.setIcon(QIcon("logo.png"))
showAction = QAction('&显示(Show)', triggered=action.show)
exitAction = QAction('&退出(Exit)', triggered= lambda : action.quit(tray))
# 添加菜单
tmenu = QMenu()
tmenu.addAction(showAction)
tmenu.addAction(exitAction)
tray.setContextMenu(tmenu)
tray.activated.connect(action.iconActivated)
tray.show()
sys.exit(app.exec_())
###############
使用类import sys
from PyQt5.QtWidgets import QSystemTrayIcon,qApp,QAction,QMenu#,QMessageBox
from PyQt5.QtGui import QIcon
class SystemTray(object):
# 程序托盘类
def __init__(self, w,app):
self.app = app
self.w = w
# QApplication.setQuitOnLastWindowClosed(False) # 禁止默认的closed方法,只能使用qapp.quit()的方法退出程序
self.w.show() # 不设置显示则为启动最小化到托盘
self.tp = QSystemTrayIcon(self.w)
self.initUI()
self.run()
def initUI(self):
# 设置托盘图标
self.tp.setIcon(QIcon('./logo_64.ico'))
def quitApp(self):
self.tp.setVisible(False) # 隐藏托盘控件,托盘图标刷新不及时,提前隐藏
qApp.quit() # 退出程序
# 退出程序
# self.w.show() # w.hide() #设置退出时是否显示主窗口
# re = QMessageBox.question(self.w, "提示", "退出系统", QMessageBox.Yes |
# QMessageBox.No, QMessageBox.No)
# if re == QMessageBox.Yes:
# self.tp.setVisible(False) # 隐藏托盘控件,托盘图标刷新不及时,提前隐藏
# qApp.quit() # 退出程序
def message(self):
# 提示信息被点击方法
print("弹出的信息被点击了")
def act(self, reason):
# 主界面显示方法
# 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击
#if reason == 2 or reason == 3:
if reason == QSystemTrayIcon.DoubleClick:
if self.w.isHidden():
self.w.show()
else:
self.w.hide()
def run(self):
a1 = QAction('&显示(Show)', triggered=self.w.show)
a2 = QAction('&退出(Exit)', triggered=self.quitApp)
tpMenu = QMenu()
tpMenu.addAction(a1)
tpMenu.addAction(a2)
self.tp.setContextMenu(tpMenu)
self.tp.show() # 不调用show不会显示系统托盘消息,图标隐藏无法调用
# 信息提示
# 参数1:标题
# 参数2:内容
# 参数3:图标(0没有图标 1信息图标 2警告图标 3错误图标),0还是有一个小图标
# self.tp.showMessage('Hello', '您使用了托盘', icon=0)
# 绑定提醒信息点击事件
self.tp.messageClicked.connect(self.message)
# 绑定托盘菜单点击事件
self.tp.activated.connect(self.act)
sys.exit(self.app.exec_()) # 持续对app的连接
如果本文对您有所帮助,请支持下本站哦!!!^_^