如何在 pystray 中创建菜单分隔符

How to create a menu separator in pystray

提问人:aurorathorn 提问时间:10/5/2023 最后编辑:Andreas Violarisaurorathorn 更新时间:10/5/2023 访问量:90

问:

我正在尝试创建一个 pystray 菜单分隔符,但我很难这样做。我已经在 SO 及其文档中搜索了这里,我发现它们非常混乱和无用,我什至试图阅读该类:Menu

class Menu(object):
    """A description of a menu.

    A menu description is immutable.

    It is created with a sequence of :class:`Menu.Item` instances, or a single
    callable which must return a generator for the menu items.

    First, non-visible menu items are removed from the list, then any instances
    of :attr:`SEPARATOR` occurring at the head or tail of the item list are
    removed, and any consecutive separators are reduced to one.
    """
    #: A representation of a simple separator
    SEPARATOR = MenuItem('- - - -', None)

    def __init__(self, *items):
        self._items = tuple(items)

我在其中找到了以下表示形式,我是这样使用的:

sep = pystray.MenuItem("- - - -", None)

但是,它没有创建分隔符,而是创建了一个包含以下文本的菜单项:- - - -

您可以在下面找到一个最小的可重现示例:

import pystray
from PIL import Image
def item1_action(icon, item):
    print("Item 1 clicked")
def item2_action(icon, item):
    print("Item 2 clicked")
def quit_action(icon, item):
    print("Quit clicked")

item1 = pystray.MenuItem("Item 1", item1_action)
item2 = pystray.MenuItem("Item 2", item2_action)
sep = pystray.MenuItem("- - - -", None)
quit_item = pystray.MenuItem("Quit", quit_action)
menu = (item1, item2,s, quit_item)
image = Image.open('icon.png')
icon = pystray.Icon("test", image, "test", menu)
icon.run()
python-3.x 菜单 分隔符 pystray

评论


答:

5赞 Andreas Violaris 10/5/2023 #1

您已正确标识指示使用分隔符的点。但是,您应该专门使用该属性而不是其赋值,因为有人可能实际上想要创建一个包含四个连字符的菜单项,并且 pystray 违背他们的意愿自动将其转换为分隔符是不合适的。SEPARATOR

话虽如此,您需要替换它:

sep = pystray.MenuItem("- - - -", None)

有了这个:

sep = pystray.Menu.SEPARATOR

评论

0赞 Andreas Violaris 10/5/2023
@OneMadGypsy我实际上已经使用过这个库几次了,所以我有一点领先优势。:D
1赞 aurorathorn 10/5/2023
哦。。。这么近...非常感谢!!!!
0赞 Andreas Violaris 10/5/2023
@aurorathorn 不客气!