moses-palmer / pystray

GNU General Public License v3.0
461 stars 57 forks source link

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

Open pmh905001 opened 8 months ago

pmh905001 commented 8 months 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