moses-palmer / pystray

GNU General Public License v3.0
482 stars 59 forks source link

Translate tuple to Menu object to keep consistency with constructor when set tuple value to menu #152

Open pmh905001 opened 1 year ago

pmh905001 commented 1 year ago

User can pass tuple object as menu in constructor of Icon, so the value of menu.setter should support to be tuple object. This can fix the issue that invisible menu item is displayed after updating menu. For example:

import pystray from PIL import Image from pystray import MenuItem

def checked_item(icon, item): icon.menu = ( MenuItem(text='item 2', action=checked_item), MenuItem(text='Invisible item', action=lambda icon, item: print('default action'), default=True, visible=False), )

pystray.Icon( name="icon_name", icon=Image.open(r'icon.png'), title='app_name', menu=( MenuItem(text='item 1', action=checked_item), MenuItem(text='Invisible item', action=lambda icon, item: print('default action'), default=True, visible=False), ) ).run()

you would see that 'Invisible item' displayed in menu. image