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大模型拯救了我,提高了工作效率。

相关推荐
微小冷12 小时前
pyqt+matplotlib多进程图像刷新
pyqt·matplotlib·进程通信·多进程·queue·process
千里码aicood17 小时前
PyQt基于卷积神经网络的智慧校园的设计与实现
人工智能·cnn·pyqt
千里码aicood20 小时前
基于PyQt心理咨询机器人智能系统的设计与实现
机器人·pyqt
典典分享指南1 天前
Windows 自动化踩坑实录
python·intellij-idea·pyqt·emacs·visual studio
深蓝海拓4 天前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
智购科技自动售卖机厂家7 天前
2026自动售货机OTA升级系统设计:从全量升级到差分升级的带宽优化工程实践~YH
大数据·人工智能·numpy·pyqt·fastapi
【赫兹威客】浩哥7 天前
【无标题】
python·spring·django·pyqt
小灰灰搞电子9 天前
PyQt QTextBoundaryFinder类详解:精准定位文本边界
pyqt
小灰灰搞电子10 天前
PyQt 实现自己的桌面萌宠源码分享
pyqt
小灰灰搞电子13 天前
PyQt6 QCommandLineParser 类详解:命令行参数解析实战指南
pyqt·参数解析