首页 > 编程知识 正文

系统托盘区,系统托盘无反应

时间:2023-05-04 13:45:11 阅读:154754 作者:4940

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的连接

如果本文对您有所帮助,请支持下本站哦!!!^_^

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。