PyQt5 创建系统托盘

 

PyQt5 创建系统托盘

#创建菜单

minimizeAction = QAction("&最小化(Min)", frmMain, triggered=frmMain.hide)
restoreAction = QAction("&显示(Show)", frmMain, triggered=frmMain.showNormal)
frmMain.trayIconMenu = QMenu(frmMain) #创建菜单
frmMain.trayIconMenu.addAction(minimizeAction)
frmMain.trayIconMenu.addAction(restoreAction)

#创建图标 

frmMain.trayIcon = QSystemTrayIcon(frmMain) #创建图标
frmMain.trayIcon.setIcon(QIcon(":/icons/trayIcon.ico")) #设置图标Icon

# 创建菜单操作接口

def trayIcon(frame, frameTrayIcon, frameTrayIconMenu, action='show'):
    def exit():
        print('get into frmMain().exit()')
        # 点击关闭按钮或者点击退出事件会出现图标无法消失的bug,需要手动将图标内存清除
        if action == 'close':
            frame.close() # 关闭登陆界面
            frameTrayIcon.trayIconMenu = None
            frameTrayIcon.setVisible(False)
        else:
            reply = QMessageBox.warning(frame, '警告', '您是否退出程序?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                print('reply: %s' % reply)
                frame.close()
                frame.trayIconMenu = None
                frame.trayIcon.setVisible(False)
                app.exit()
                
    if action == 'close':
        exit()
    else:
        quitAction = QAction("&退出(Exit)", frame, triggered=exit)
        frameTrayIconMenu.addAction(quitAction)
        frameTrayIcon.setContextMenu(frameTrayIconMenu)
        frameTrayIcon.show()
        def act(reason):
            # 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击
            print('get into act(), reason: %s' % reason)
            if reason == 2 or reason == 3:
                frame.showNormal()
            print("系统托盘的图标被点击了")
        frameTrayIcon.activated.connect(act)
    def message():
        print("弹出的信息被点击了")
    frameTrayIcon.messageClicked.connect(message)

#系统托盘使用

创建图标
trayIcon(frmMain, frmMain.trayIcon, frmMain.trayIconMenu, action='show')

关闭图标
trayIcon(self, self.trayIcon, self.trayIconMenu, action='close')

 

附:

class frmLogin(QtWidgets.QWidget, ui_login.Ui_DialogLogin):
    def __init__(self):
        ...

        minimizeAction = QAction("&最小化(Min)", self, triggered=self.hide)
        restoreAction = QAction("&显示(Show)", self, triggered=self.showNormal)
        # quitAction = QAction("&退出(Exit)", self, triggered=self.exit)
        self.trayIconMenu = QMenu(self)
        self.trayIconMenu.addAction(minimizeAction)
        self.trayIconMenu.addAction(restoreAction)
        # self.trayIconMenu.addSeparator()
        # self.trayIconMenu.addAction(quitAction)

        self.trayIcon = QSystemTrayIcon(self)
        self.trayIcon.setIcon(QIcon(":/icons/trayIcon.ico"))
        # self.trayIcon.setContextMenu(self.trayIconMenu)
        # self.trayIcon.show()
        
        trayIcon(self, self.trayIcon, self.trayIconMenu, action='show')


    @QtCore.pyqtSlot()
    def on_btnlogin_clicked(self):
        '''登陆成功后'''
                '''创建托盘图标'''
                minimizeAction = QAction("&最小化(Min)", frmMain, triggered=frmMain.hide)
                restoreAction = QAction("&显示(Show)", frmMain, triggered=frmMain.showNormal)
                frmMain.trayIconMenu = QMenu(frmMain)
                frmMain.trayIconMenu.addAction(minimizeAction)
                frmMain.trayIconMenu.addAction(restoreAction)

                frmMain.trayIcon = QSystemTrayIcon(frmMain)
                frmMain.trayIcon.setIcon(QIcon(":/icons/trayIcon.ico"))
                # self.trayIcon.setContextMenu(self.trayIconMenu)
                # self.trayIcon.show()
                '''关闭 登陆时的托盘图标'''
                trayIcon(self, self.trayIcon, self.trayIconMenu, action='close')
                '''创建 登陆时的托盘图标'''
                trayIcon(frmMain, frmMain.trayIcon, frmMain.trayIconMenu, action='show')

'''创建图标操作'''
def trayIcon(frame, frameTrayIcon, frameTrayIconMenu, action='show'):
    def exit():
        print('get into frmMain().exit()')
        # 点击关闭按钮或者点击退出事件会出现图标无法消失的bug,需要手动将图标内存清除
        # self.trayIconMenu = None
        # sys.exit(app.exec_())
        if action == 'close':
            frame.close() # 关闭登陆界面
            frameTrayIcon.trayIconMenu = None
            frameTrayIcon.setVisible(False)
        else:
            reply = QMessageBox.warning(frame, '警告', '您是否退出程序?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                print('reply: %s' % reply)
                # app.exit()
                frame.close()
                frame.trayIconMenu = None
                frame.trayIcon.setVisible(False)
                
    if action == 'close':
        exit()
    else:
        quitAction = QAction("&退出(Exit)", frame, triggered=exit)
        frameTrayIconMenu.addAction(quitAction)
        frameTrayIcon.setContextMenu(frameTrayIconMenu)
        frameTrayIcon.show()
        def act(reason):
            # 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击
            print('get into act(), reason: %s' % reason)
            if reason == 2 or reason == 3:
                frame.showNormal()
            print("系统托盘的图标被点击了")
        frameTrayIcon.activated.connect(act)
    def message():
        print("弹出的信息被点击了")
    frameTrayIcon.messageClicked.connect(message)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值