PyQt:界面无边框+实现窗口最小化(任务栏图标隐藏+托盘图标显示)

一、整体实现效果

诸如WX、各种管家 的桌面显示方式。窗口关闭后,往往是任务栏图标消失,保持右下角托盘图标显示,保持后台运行。双击托盘图标后,窗口显示。

二、代码实现

python 复制代码
from PyQt5.QtWidgets import *
from ato_upgrade import Ui_app  #ui文件
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QMouseEvent

class auto_main(QMainWindow, Ui_app):

    def __init__(self):
        super(auto_main, self).__init__()
        self.setupUi(self)
        self.setWindowFlag(Qt.FramelessWindowHint)  # 设置窗口无边框
        self.setAttribute(Qt.WA_TranslucentBackground)  # 设置背景透明
        #显示主窗口
        self.show()
        #创建托盘图标并显示
        self.create_tray_icon()
        #关闭事件
        self.pushButton.clicked.connect(self.hide)
        # 设置鼠标按下时的位置,保证无边框时窗口可以用鼠标拖动
        self.drag_position = None

    def icon_activated(self,reason):
        '''
        双击托盘图标,恢复窗口
        :param reason:
        :return:
        '''
        if reason == QSystemTrayIcon.DoubleClick:
            self.setWindowState(Qt.WindowActive)
            self.show()
            # 在这里可以添加双击托盘图标时的处理逻辑

    def create_tray_icon(self):
        '''
        创建托盘图标
        :return:
        '''

        # 创建一个QSystemTrayIcon对象
        tray_icon = QSystemTrayIcon(self)
        #设置托盘图标
        tray_icon.setIcon(QIcon(QIcon('image/托盘_图标.png')))

        # 创建一个上下文菜单(右击托盘图标显示的菜单栏选项)
        menu = QMenu()
        quit_action = QAction("退出程序", menu)
        quit_action.triggered.connect(sys.exit)
        menu.addAction(quit_action)

        # 设置鼠标悬停提示文本
        tray_icon.setToolTip('远程升级检测程序')

        # 设置托盘图标的上下文菜单
        tray_icon.setContextMenu(menu)

        # 连接激活信号到槽函数
        tray_icon.activated.connect(self.icon_activated)

        # 显示托盘图标
        tray_icon.show()

        # 气泡文本
        # tray_icon.showMessage("标题","这是描述性文本")

    #窗口拖动实现
    def mousePressEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton:
            self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
            event.accept()

    def mouseMoveEvent(self, event: QMouseEvent):
        if event.buttons() & Qt.LeftButton and self.drag_position is not None:
            self.move(event.globalPos() - self.drag_position)
            event.accept()

    def mouseReleaseEvent(self, event: QMouseEvent):
        self.drag_position = None

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = auto_main()
    sys.exit(app.exec_())

三、备注说明

本程序部分代码由AI大模型生成:使用的AI大模型,不得不说AI大模型拯救了我,提高了工作效率。

相关推荐
GIS 数据栈7 天前
博客摘录「 pyqt 为新建子线程传参以及子线程返回数据到主线程」2023年12月7日
笔记·python·pyqt·多线程·多线程通信
西木九10 天前
解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
python·opencv·pyqt
充值内卷10 天前
PyQt入门指南五十一 文档与注释规范
开发语言·python·pyqt
王哈哈^_^13 天前
【数据集】【YOLO】【目标检测】树木倒塌识别数据集 9957 张,YOLO道路树木断裂识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^13 天前
【数据集】【YOLO】【目标检测】航拍船只识别数据集 3550 张,YOLO航拍水面船只识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^14 天前
【数据集】【YOLO】【目标检测】摔跤识别数据集 5097 张,YOLO行人摔倒识别算法实战训练教程!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
充值内卷14 天前
PyQt入门指南四十四 打印与预览功能的实现
开发语言·python·pyqt
王哈哈^_^14 天前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
王哈哈^_^15 天前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
苏三有春18 天前
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)
python·pyqt