PyQt5 使用系统托盘

news2024/11/15 18:36:13

Qt5 中 QSystemTrayIcon 类提供了系统托盘的功能

具体功能

  1. 初始化

初始化 QSystemTrayIcon 对象, 需要传递一个父控件作为初始参数

import sys
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QWidget

app = QApplication(sys.argv)
window = QWidget()
tray = QSystemTrayIcon(window)
# 系统托盘图标
tray.setIcon(QIcon('../image/Qt5.ico'))
# 鼠标悬停提示
tray.setToolTip('PyQt5')
tray.show()

QSystemTrayIcon 对象可以设置托盘图标以及鼠标悬停提示, 另外需要手动调用 tray.show(), 其不会随父控件 window.show() 而自动展示

  • 其中图标可以使用 Qt5 自带的图标
tray.setIcon(QApplication.style().standardIcon(0))

  1. 右键菜单

右键点击托盘图标时, 弹出右键菜单

# 创建托盘图标菜单
menu = QMenu(window)
# 添加菜单项
action_show = QAction('显示', window)
action_show.triggered.connect(window.show)
action_quit = QAction('退出', window)
action_quit.triggered.connect(app.quit)
menu.addAction(action_show)
menu.addAction(action_quit)

  1. 系统消息

QSystemTrayIcon.showMessage(title, msg, icon) 其中 icon 有以下几种类型:

  • QSystemTrayIcon.NoIcon
  • QSystemTrayIcon.Information
  • QSystemTrayIcon.Warning
  • QSystemTrayIcon.Critical

这些常量都属于类变量

QSystemTrayIcon 对象可以向系统的通知栏发送消息

tray.showMessage('提示', '右键单击', tray.Information)

在这里插入图片描述


  1. 鼠标互动

除了上面的右键菜单, QSystemTrayIcon 类还可通过 QSystemTrayIcon.activated 信号监测对托盘图标的单击, 双击, 按下鼠标中键, 具体类型有:

  • QSystemTrayIcon.Context
  • QSystemTrayIcon.DoubleClick
  • QSystemTrayIcon.Trigger
  • QSystemTrayIcon.MiddleClick
msg = {
	QSystemTrayIcon.Trigger: '左键单击',
	QSystemTrayIcon.Context: '右键单击',
	QSystemTrayIcon.DoubleClick: '双击',
	QSystemTrayIcon.MiddleClick: '鼠标中键'
}

def showMsg(reason):
	tray.showMessage('提示', msg[reason], tray.Information)


tray.activated.connect(self.showMsg)

完整示例

"""
使用系统托盘
"""

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (
    QAction,
    QApplication,
    QMenu,
    QSystemTrayIcon,
    QWidget,
    qApp
)


class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.resize(320, 240)
        self.setWindowTitle('PyQt5 System Tray')
        self.setWindowIcon(QIcon('../image/PyQt5.png'))

        self.msg = {
            QSystemTrayIcon.Trigger: '左键单击',
            QSystemTrayIcon.Context: '右键单击',
            QSystemTrayIcon.DoubleClick: '双击',
            QSystemTrayIcon.MiddleClick: '鼠标中键'
        }
        self.initSystemTray()

    def initSystemTray(self):
        # 创建系统托盘图标对象
        self.tray = QSystemTrayIcon(self)
        self.tray.setIcon(QIcon('../image/Qt5.ico'))
        # 鼠标悬停展示
        self.tray.setToolTip('系统托盘')

        # 创建托盘图标菜单
        menu = QMenu()
        # 添加菜单项
        action_show = QAction('显示', self)
        action_show.triggered.connect(self.showWindow)
        action_quit = QAction('退出', self)
        action_quit.triggered.connect(qApp.quit)
        menu.addAction(action_show)
        menu.addAction(action_quit)

        # 将菜单设置到托盘图标
        self.tray.setContextMenu(menu)
        self.tray.activated.connect(self.showMsg)
        self.tray.show()

    def showWindow(self):
        self.setWindowState(
            self.windowState() & ~Qt.WindowMinimized | Qt.WindowActive
        )

    def showMsg(self, reason):
        self.tray.showMessage('提示', self.msg[reason], self.tray.Information)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

barrier failt to connect to server: timeout

win10做server,mac做client,一直运行失败,观察日志发现timeout。 最后发现是win10的防火墙入站规则里的Barrier Listener里设置的端口,和Barrier中设置的端口不一致。 因为局域网内有其他同事也用这个,所以修改了端口…

API资源对象CRD、认识Operator-理论知识和认识Operator-初次上手(2024-07-17)

一、API资源对象CRD Kubernetes 自定义资源定义(Custom Resource Definition,简称 CRD)是一种强大的 Kubernetes API 扩展机制,允许你定义和创建自己的资源类型,以满足您的应用程序或基础设施需求。 CRD 的核心思想是…

原型图设计指南:从基础到精通

用户体验设计师和原型设计的主要功能 PM、网站开发工程师通过展示产品内容、结构和粗略布局来沟通最初产品设想的重要工具,说明用户将如何与产品互动,而不是视觉设计。在大厂中,岗位分工更加细致明确,大部分原型都是产品经理做的&…

Oracle系统表空间的加解密

实验环境 数据库选择的是orclpdb1,当前系统表空间未加密: SQL> show con_nameCON_NAME ------------------------------ ORCLPDB1SQL> select TABLESPACE_NAME, STATUS, ENCRYPTED from dba_tablespaces;TABLESPACE_NAME STATUS …

【Ubuntu】安装 Snipaste 截图软件

Snipaste 下载安装并使用 Snipastefor more information报错解决方案每次启动软件需要输入的命令如下添加开机自启动 下载 下载地址 安装并使用 Snipaste 进入终端输入命令 # 1、进入到 Snipaste-2.8.9-Beta-x86_64.AppImage 所在目录(根据自己的下载目录而定&…

uniapp安卓plus原生选择系统文件

uniapp安卓plus原生选择系统文件 效果&#xff1a; 组件代码&#xff1a; <template xlang"wxml" minapp"mpvue"><view></view> </template> <script>export default {name: file-manager,props: {},data() {return {is…

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…

Hi-Fix 介绍

一、HIFIX 定义与功能 HIFIX是连接安装在自动检测装置&#xff08;Tester&#xff09;本体内的功能卡(Resource board)和承载被测设备(Device)探针卡&#xff08;Probe card&#xff09;的媒介&#xff0c;将来自检测装置的大量测试信号统一发送到被测设备(Device)。 HiFIX 能…

Java语言程序设计——篇八(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; Java常用核心类 主要内容Object: 终极父类toString( )方法equals( )方法getClass( )方法hashCode( )方法clone( )方法finalize( )方法实战演练 …

CentOS6.0安装telnet-server启用telnet服务

CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…

使用echo写入多行文字到文件时换行的处理

目标 想使用echo写入如下内容到文件program.c里 #include<stdio.h> int main(){printf("hello!\n"); } 需要处理 1、如何处理行换 2、代码中的换行如何处理 实际例子 创建文件夹 mkdir test cd test chmod 777 . 创建文件写入内容 查看 cat -n program.c…

SLS 数据加工全面升级,集成 SPL 语法

作者&#xff1a;灵圣 数据加工概述 在系统开发、运维过程中&#xff0c;日志是最重要的信息之一&#xff0c;其最大的优点是简单直接。不过在整个日志的生命周期里有一对很难调和的矛盾&#xff1a;输出和采集日志要求尽可能的简单便捷 vs 日志分析时需要数据格式化并能够按…

【SpringBoot】3 项目配置及部署

配置文件配置 将 application.properties 改为 application.yml &#xff0c;写法不一样&#xff0c;本人比较习惯用 yaml 格式。 配置项目名称和项目端口号。 application.yml server:port: 8888 spring:application:name: system配置外置 Servlet 容器 如果要在 Tomcat 容器…

数据结构·AVL树

1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果存数据时接近有序&#xff0c;二叉搜索将退化为单支树&#xff0c;此时查找元素效率相当于在顺序表中查找&#xff0c;效率低下。因此两位俄罗斯数学家 G.M.Adelson-Velskii 和E.M.Landis 在1962年发明了一种解…

音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件

在文章《音视频入门基础&#xff1a;PCM专题&#xff08;1&#xff09;——使用FFmpeg命令生成PCM音频文件并播放》中讲述了生成PCM文件的方法。通过FFmpeg命令可以把该PCM文件转为WAV格式的音频文件&#xff1a; ./ffmpeg -ar 44100 -ac 2 -f s16le -acodec pcm_s16le -i aud…

「Ant Design」Antd 中卡片如何完全不展示内容区域、按需展示内容区域、不展示标题

前言 下面是默认的 Antd 卡片&#xff0c;由以下区域组成 处理 Antd 的 Card 展示形式大致有下面三种 卡片完全不展示内容区域 const App () > (<Card title"Default size card" extra{<a href"#">More</a>} style{{ width: 300 }}b…

工厂数字化转型,该如何建设数字孪生车间?

在工业4.0的浪潮下&#xff0c;数字化转型已成为工厂升级的必然趋势&#xff0c;而数字孪生技术的引入则为这一转型注入了强大动力。智汇云舟作为数字孪生行业头部企业和视频孪生技术首倡者&#xff0c;以创新的视角和前沿的技术&#xff0c;为数字工业建设助力&#xff0c;给众…

《昇思25天学习打卡营第2天|张量》

张量其实就是矩阵&#xff0c;在python中主要是使用numpy这个库来操作&#xff0c;然后再mindspore中一般使用tensor对象作为张量的载体 张量如果维度只有二维的话可以简单理解为数据库中的表&#xff0c;但是如果是3维4维主要是在列表中增加列表项比如 【 【1&#xff0c;1】…

C++ //练习 15.28 定义一个存放Quote对象的vector,将Bulk_quote对象传入其中。计算vector中所有元素总的net_price。

C Primer&#xff08;第5版&#xff09; 练习 15.28 练习 15.28 定义一个存放Quote对象的vector&#xff0c;将Bulk_quote对象传入其中。计算vector中所有元素总的net_price。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&am…

【C++笔试强训】day01

数字统计 思路 用%10取出个位的数字&#xff0c;用/10迭代。 代码 #include <iostream> using namespace std;int main() {int l, r, res 0;cin >> l >> r;for (int i l; i < r; i){int x i;while (x){if (x % 10 2) res;x / 10;}}cout << r…