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

一、整体实现效果

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

二、代码实现

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623209.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Backend - 数据分析 Pandas

目录 一、作用 二、基础环境 (一)执行虚拟环境的终端命令 (二)代码中导包 三、应用:一维数组 (一)Series对象 1. 含义 2. 常用属性和方法 (1)属性 (…

【精读Yamamoto】方向性连接如何丰富神经网络的功能复杂度 | 体外神经元培养实验 | 脉冲神经元模型(SNN) | 状态转移模型

探索大脑的微观世界:方向性连接如何丰富神经网络的功能复杂度 在神经科学领域,理解大脑如何通过其复杂的网络结构实现高级功能一直是一个核心议题。最近,一项由Nobuaki Monma和Hideaki Yamamoto博士领导的研究为我们提供了新的视角&#xff…

【java-数据结构-栈和队列】

上篇文章,我们已经完成链表的收尾工作,从本篇文章开始,将进入栈和队列的学习,j觉得小编写的还可以的可以留个关注支持一下~话不多说,上正文~ 1.栈 概念:一种特殊的线性表,其只允许在固定的一端…

信创应用软件之协同办公(OA)

信创应用软件之协同办公(OA) 概述 办公 “办公”一词源于历史上对公事、公务处理的简称,现代办公有了更先进的诠释,指在特定时间、特定空间中人互相协作、共同运作的过程, 即围绕以“人”为主的办公主体与其关联的一…

zabbix监控mariadb

zabbix 服务端安装请参阅:红帽 9 zabbix 安装流程_红帽安装zabbix-CSDN博客 源码包安装mariadb请参阅:源码包安装mariadb_mariadb 11 源码编译安装-CSDN博客 在MariaDB中,你需要创建一个专门的用户,用于Zabbix进行监控。这个用户…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台:是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核,具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

疯狂学英语

我上本科的时候,学校出国留学的气氛不浓厚,我们班只有一名同学有出国留学的倾向,我们宿舍八个人没有一个考虑过留学。 只有小昊,在本校上了研究生之后,不知道受到什么影响,想出国留学。那时候小昊利用一切…

单文件EXE绿色软件制作工具​Enigma Virtual Box​利用 EnigmaVB 打包 Qt 应用程序

功能描述:详细介绍如何利用 EnigmaVB 打包 Qt 应用程序,从 EnigmaVB 软件下载、安装,到如何使用,一步步教你走进 EnigmaVB 软件,最后还介绍了一款针对 Enigma Virtual Box 制作的单文件程序进行解包的工具 EnigmaVBUnp…

【启明智显技术分享】SSD201/SSD202D核心板UI界面开发全攻略:LVGL使用指南

提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

数字化信息协同助力智能巡查,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机数字侦查场景下智能靶标检测识别系统

无人机的快速发展与普及,使得其进入千家万户各行各业,发挥着越来越重要的作用。随着科技的飞速发展,未来的数字信息化战场正逐渐展现出其独特的作战形态。在这个以数据和信息为主导的新战场上,无人机侦查手段与人工智能目标智能检…

Django图书馆综合项目-学习

图书馆项目 一 前期准备 安装好所需的环境 我这边用的IDE是VScode 操作系统是MACOS 二 先创建一个虚拟环境 python3 -m venv myenvbook source myenvbook/bin/activate 三 安装 Django pip3 install django4.2 四 创建 Django 项目 django-admin startproject bookp…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目: 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入&#xff…

LLM应用-文档解析 AI大模型总结分析文档

1)https://notegpt.io/pdf-summary 支持总结,思维导图、对话 2)chatdoc https://chatdoc.com/ 3)chatpdf https://www.chatpdf.com/ https://www.chatpdfs.cn/ 4)kimi https://kimi.moonshot.cn/

004.可观察对象与观察者

Rx非常适合事件驱动的应用程序。这是有意义的,因为事件(作为)(如前所述)是创建时变值的命令式方法。从历史上看,事件驱动编程主要出现在客户端技术中,因为作为事件实现的用户交互。例如,你可能工作过使用OnMouseMove或OnKeyPressed事件。正因…

构建滴滴业务中台:系统架构设计探索

在当今数字化时代,滴滴作为中国领先的出行平台,承载着数亿用户的出行需求,业务规模庞大且复杂多样。为了更好地支撑业务发展和提升服务质量,滴滴不断探索和构建业务中台,以实现业务的快速响应、灵活运营和持续创新。在…

2024年最新青龙面板跑脚本教程(一)持续更新中

文章目录 步骤 1: 安装青龙面板步骤 2: 访问青龙面板步骤 3: 上传或创建JavaScript脚本步骤 4: 添加定时任务步骤 5: 查看日志示例脚本步骤 6: 管理依赖和环境变量通用依赖如下,可手动增加。 要在青龙面板上运行JavaScript脚本,首先需要确保你已经成功安…

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中,我们介绍了线程的创建、Thread 类及常见方法、线程的状态,今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念: 线程安全的确切定义是复杂的,但我们可以这样认为&…

阿里云OSS配置跨域及域名访问

1、配置跨域 进入对象存储OSS–>OSS存储桶–>数据安全–>跨域设置–>创建规则 2、配置跨域 Etag x-oss-request-id3、配置结果如下 4、数据源配置 切换到数据管理–>静态页面 配置根页面 保存结果如下 5、配置域名访问 绑定域名 添加txt记录 验证绑定 …

【linux-IMX6ULL-uboot初次编译及烧录

目录 1. uboot基本概念1. 1 uboot的编译 3. uboot的烧录2. uboot的烧录结果 第一次不进行原理性的探究,也不关注源码内容,只是进行一个直观的了解,对uboot进行初次编译并进烧录到IMX6ULL板卡中 1. uboot基本概念 U-Boot(Universa…

设计循环队列-C语言实现

题目描述 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的…