欢迎光临散文网 会员登陆 & 注册

pystray设置托盘图标 以及设置子菜单

2023-03-24 17:50 作者:Bojaka  | 我要投稿

有项目需要用到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()


pystray设置托盘图标 以及设置子菜单的评论 (共 条)

分享到微博请遵守国家法律