首页 > 编程语言 >Python_PyStray结合Tkinter显示系统托盘图标

Python_PyStray结合Tkinter显示系统托盘图标

时间:2024-03-27 15:13:13浏览次数:29  
标签:Tkinter Python menu 系统托盘 pystray 菜单项 图标 self icon

前言

PyStray 是一个用于 Python 的系统托盘图标库,它可以让您轻松地在 Windows、macOS 和 Linux 下创建和管理托盘图标应用程序。通过 PyStray,您可以创建自定义托盘图标、菜单和气泡通知,并响应托盘图标的各种事件。

PyStray 的主要特点包括:

  1. 跨平台支持:支持 Windows、macOS 和 Linux。
  2. 使用简单:易于安装、配置和使用。
  3. 自定义菜单:支持创建复杂的上下文菜单,并具有灵活的菜单项数据结构。
  4. 气泡通知功能:支持显示定制的气泡通知,包括标题、消息、图标以及可选的声音。
  5. 自定义图标:支持使用各种格式的图像文件作为托盘图标,包括 PNG、ICO、JPEG 和 GIF 等。
  6. 事件处理:支持处理托盘图标的各种事件,例如鼠标单击、双击和右键菜单。

一、使用

  1. 创建托盘图标,并显示菜单
import pystray                         # 导入 PyStray 库
from PIL import Image                  # 导入 PIL 库中的 Image 模块

def on_quit_clicked(icon):             # 自定义回调函数
    icon.stop()                        # 对象停止方法

# 创建图标对象
image = Image.open("ICO.ico")           # 打开 ICO 图像文件并创建一个 Image 对象
menu = (pystray.MenuItem(text='退出', action=on_quit_clicked),) # 创建菜单项元组
icon = pystray.Icon("name", image, "托盘名称", menu)            # 创建 PyStray Icon 对象,并传入关键参数

# 显示图标
icon.run()                              # 启动托盘图标目录
 

2.创建托盘图标,显示多个菜单,并显示气泡通知

  • default=True则点击托盘图标时执行
  • visible属性设置是否可见
  • enabled设置菜单是否可用
import pystray        # 导入 PyStray 库
from PIL import Image # 导入 Python Imaging Library 的 Image 类

# 定义点击菜单项的回调函数
def click_menu(icon, item):
    print("点击了", item)

# 定义退出菜单项的回调函数
def on_exit(icon, item):
    icon.stop()

# 定义通知内容的回调函数
def notify(icon: pystray.Icon):
    icon.notify(title="通知标题", message="通知内容")

# 创建菜单项
menu = (
    pystray.MenuItem('菜单A', click_menu),                                  # 第一个菜单项
    pystray.MenuItem('菜单B', click_menu),                                  # 第二个菜单项
    pystray.MenuItem(text='菜单C', action=click_menu, enabled=False),        # 第三个菜单项
    pystray.MenuItem(text='发送通知', action=notify),                        # 第四个菜单项
    pystray.MenuItem(text='点击托盘图标显示', action=click_menu, default=True, visible=False),  # 第五个菜单项
    pystray.MenuItem(text='退出', action=on_exit),                           # 最后一个菜单项
)

# 创建图标对象
image = Image.open("ICO.ico")                                                # 打开并读取图片文件
icon = pystray.Icon("name", image, "鼠标移动到\n托盘图标上\n展示内容", menu)     # 创建图标对象并绑定菜单项

# 显示图标并等待用户操作
icon.run()
 

二、结合Tkinter使用

import threading
import tkinter as tk
import pystray
from PIL import Image

class GUI:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('演示窗口')
        self.root.geometry("500x200+1100+150")
        # 当用户点击窗口右上角的关闭按钮时,Tkinter 将自动发送 WM_DELETE_WINDOW 关闭事件。通过对其进行处理并调用 self.hide_window() 方法,可以改为将窗口隐藏到系统托盘中。
        # 该方法用于将程序窗口隐藏到系统托盘中而非直接退出应用程序
        self.root.protocol('WM_DELETE_WINDOW', self.hide_window)
        # 添加菜单和图标
        self.create_systray_icon()
        # 绘制界面
        self.interface()

    def interface(self):
        """"界面编写位置"""
        pass

    def create_systray_icon(self):
        """
        使用 Pystray 创建系统托盘图标
        """
        menu = (
            pystray.MenuItem('显示', self.show_window, default=True),
            pystray.Menu.SEPARATOR,  # 在系统托盘菜单中添加分隔线
            pystray.MenuItem('退出', self.quit_window))
        image = Image.open("ICO.ico")
        self.icon = pystray.Icon("icon", image, "图标名称", menu)
        threading.Thread(target=self.icon.run, daemon=True).start()

    # 关闭窗口时隐藏窗口,并将 Pystray 图标放到系统托盘中。
    def hide_window(self):
        self.root.withdraw()

    # 从系统托盘中恢复 Pystray 图标,并显示隐藏的窗口。
    def show_window(self):
        self.icon.visible = True
        self.root.deiconify()

    def quit_window(self, icon: pystray.Icon):
        """
        退出程序
        """
        icon.stop()  # 停止 Pystray 的事件循环
        self.root.quit()  # 终止 Tkinter 的事件循环
        self.root.destroy()  # 销毁应用程序的主窗口和所有活动


if __name__ == '__main__':
    a = GUI()
    a.root.mainloop()
 

2024-03-27 15:03:10【出处】:https://blog.csdn.net/qq_45664055/article/details/130464922

=======================================================================================

标签:Tkinter,Python,menu,系统托盘,pystray,菜单项,图标,self,icon
From: https://www.cnblogs.com/mq0036/p/18099346

相关文章

  • 使用compileall模块编译Python的源代码
    编译当前目录及子目录所有python源码为pyc文件python-mcompileall-b.参数说明-b:这个选项告诉compileall模块在编译时进行备份。它会为每个已编译的源文件创建一个备份文件,后缀为.pyc.bak.:这是命令行中的当前目录。这意味着compileall将会在当前目录及其所有子目录中......
  • Python教程:深入探索 Python 列表(List)
    在Python中,列表(List)是一种非常常用且强大的数据结构,它能够存储多个元素,并提供了丰富的操作方法。本文将带您深入探索Python列表,从基础知识到高级应用,让您全面掌握列表的各种技巧和用法。1.列表基础1.1什么是列表列表是一种有序、可变、允许重复元素的数据结构,用方......
  • Python读取NC文件指定经度、纬度与时相的数据
    Python读取NC文件指定经度、纬度与时相的数据本文介绍基于Python语言的netCDF4库,读取.nc格式的数据文件,并提取指定维(时间、经度与纬度)下的变量数据的方法。我们之前介绍过.nc格式的数据,其是NetCDF(NetworkCommonDataForm)文件的扩展名,是一种常用的科学数据存储格式,多用于存储科......
  • Python程序设计 循环结构
    1.达依尔的麦子数相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么.达依尔说:”只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格一麦子数的两倍,摆满整个棋盘,我就感恩不尽了。......
  • python 列表基本操作
    python列表基本操作一、列表基本操作1.列表2.访问列表中的值3.更新列表4.删除列表元素5.Python列表脚本操作符6.Python列表截取与拼接7.嵌套列表8.列表比较9.Python列表函数&方法二、代码概述一、列表基本操作1.列表序列是Python中最基本的数据结构......
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键
    一、简介在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。二、安装petl和psycopg2首先,我们需要安装petl和psycopg2......
  • python变量
    python语法【1】注释语法便于开发人员了解代码含义如何添加注释单行注释:只对本行注释#注释多行注释:适用于代码块'''注释'''快捷键:ctrl/代码注释原则:只给特定的代码位置添加必要的注释可以英文,可以中文【2】变量和常量都是用来表示事物或......
  • Electron Mac 打包报 Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT 解决
    ElectronMac打包报Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT解决方法最近在开发的时候,发现打包Electron项目报错,错误的信息为Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT报错原因是因为Mac升级到macOSventuraversion13.0.1后系统移除了......
  • 用python创建一个简单的GUI程序,python小案例
    importtkinter这一行导入了tkinter库,这是Python中用于创建图形用户界面(GUI)的标准库之一importtkinterastk这一行同样导入了tkinter库,但是使用了as关键字给它起了一个别名tk,这样在代码中就可以使用tk来代替tkinter了,使代码更简洁。window=tk.Tk()创建一个Tkint......
  • python 数据类型和运算符 进阶学习
    有了前面的基础的,我们对数据类型有了一定的了解,按照思维进阶深度学习的学习方法,我们对前面的实例进行扩展学习,以求学习到更多一点的知识。实例二:输入两个数,计算它们的和、平方、三次方、平方根、三次方根  首先是复习前面的数据类型的知识该程序的执行结果  是......