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

相关推荐
越甲八千5 天前
pyqt SQL Server 数据库查询-优化2
数据库·windows·pyqt
豆芽8195 天前
决策树(DecisionTree)
python·决策树·机器学习·pyqt·sklearn
utmhikari6 天前
【日常随笔】万字长文,如何用pyside6开发一个python桌面工具
前端·python·pyqt
zoney hu8 天前
PyQt学习记录
pyqt
不爱吃鱼的猫-10 天前
Pyside6 开发 使用Qt Designer
python·pyqt·pyside6
不爱吃鱼的猫-10 天前
PySide6控件:QFont设置、QColor调色板、QPixmap图像处理与QCursor光标自定义
python·pyqt·个人开发·pyside6
zew104099458811 天前
基于深度学习的手势识别系统设计
人工智能·深度学习·算法·数据集·pyqt·yolov5·训练模型
安然无虞11 天前
31天Python入门——第14天:异常处理
后端·爬虫·python·职场和发展·pyqt
QMT量化交易14 天前
PyQt中使用QTabWidget实现多页面布局的实现方法
python·pyqt
tt55555555555516 天前
pyQt学习笔记——Qt资源文件(.qrc)的创建与使用
笔记·学习·pyqt