Как создать разделитель меню в Pystray

Я пытаюсь создать разделитель меню 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правильно определили точку, в которой указано использование разделителя. Однако вам следует специально использовать атрибут SEPARATOR вместо присвоенного ему значения, потому что кто-то действительно может захотеть создать пункт меню с четырьмя дефисами, и для pystray было бы нецелесообразно автоматически преобразовывать его в разделитель против его воли.

При этом вам необходимо заменить это:

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

с этим:

sep = pystray.Menu.SEPARATOR

@OneMadGypsy Я действительно использовал эту библиотеку несколько раз, так что у меня было некоторое преимущество. :D

Andreas Violaris 04.10.2023 20:01

Оооо... так близко... спасибо тебе огромное!!!!

aurorathorn 04.10.2023 20:12

@aurorathorn Всегда пожалуйста!

Andreas Violaris 04.10.2023 20:29

Другие вопросы по теме

Как построить полиномиальную модель нескольких категорий на диаграмме рассеяния
Замените двойную обратную косую черту одинарной обратной косой чертой в объекте bytes
База данных не обновляется, когда я редактирую текстовые поля в Tkinter. Ошибка: sqlite3.OperationalError: рядом с «?»: синтаксическая ошибка
Импортируйте виджеты в функцию из класса в другом файле. NameError: имя «textbox1» не определено
Как получить сумму вложенных кортежей в списке
Ошибка выполнения Python: требуется версия Python 2.7 или 3.4+. Как решить проблему для диалогового приложения?
Преобразование списка словаря в фрейм данных и слияние с исходным фреймом данных
Подпроцесс (запуск процесса ssh в фоновом режиме) зависает при включении stderr
SQL: дублирование записи, когда я использую два разных INNER JOIN с тремя общими таблицами
Групповое и процентное распределение pyspark, эквивалентное данному коду pandas