pystray设置托盘图标 以及设置子菜单
有项目需要用到python设置托盘图标 发现pystray不错 但网上的教程特别少
有的只有创建一个最基础的一级菜单的教程
于是我来教一下大家怎么创建多级菜单

首先给大家看一下可以搜索到的教程 <创建一级菜单>
import pystray
from PIL import Image
from pystray import MenuItem
def click_menu(icon, item):
print("点击了", item)
def on_exit(icon, item):
icon.stop()
def notify(icon: pystray.Icon):
icon.notify("我是消息类容", "消息标题")
menu = (MenuItem(text='菜单1', action=click_menu), MenuItem(text='菜单2', action=click_menu),
MenuItem(text='菜单3', action=click_menu, enabled=False),
MenuItem(text='发送通知', action=notify),
MenuItem(text='我是点击图标的菜单', action=click_menu, default=True, visible=False),
MenuItem(text='退出', action=on_exit),
)
image = Image.open("logo.ico")
icon = pystray.Icon("name", image, "鼠标移动到\n托盘图标上\n展示内容", menu)
icon.run()

来 然后我教你怎么创建多级的 以下是我写的一个类 用于托盘菜单控制的 相信你可以看懂 我就不解释了 看一下就懂了
from pystray import Icon as icon, Menu as menu, MenuItem as item
from PIL import Image
class TrayControl(object):
def __init__(self) -> None:
self.icon = None
self.t_val = "二号"
self.MenuItem = menu(item("选择音效包",
menu(
item("一号", action= lambda: setattr(self, "t_val", "一号"),checked=lambda item: self.t_val == "一号",),
item("二号", action= lambda: setattr(self, "t_val", "二号"),checked=lambda item: self.t_val == "二号",),
),
),
item("退出", action=self.quit_app),
)
def quit_app(self):
self.icon.stop()
def create_tray(self):
image = Image.new(mode="RGB", size=(260, 100), color="#ff0000")
self.icon = icon("keysound",image,"keysound",menu = self.MenuItem)
self.icon.run()
