Tkinter: добавление иконки в пункты меню - PullRequest
1 голос
/ 04 апреля 2019

У меня есть совершенно функциональное контекстное меню TkInter с правой кнопкой мыши, с 4 пунктами и 1 разделителем, однако я пытаюсь выяснить, как можно отобразить значок для каждого элемента, мне удалось получить элементы для отображения в виде значки, но это удаляет видимость реального текста, что не идеально. Кто-нибудь знает, как заставить текст отображаться справа от иконки?

Я вставлю фрагменты кода и фактическое меню.

try:
    def rClick_Copy(e, apnd=0):
        e.widget.event_generate('<Control-c>')
    def rClick_Cut(e):
        e.widget.event_generate('<Control-x>')
    def rClick_Paste(e):
        e.widget.event_generate('<Control-v>')
    def rClick_SelectA(e):
        e.widget.select_range(0, 'end')
        e.widget.icursor('end')
     e.widget.focus()
     nclst=[
            ('Cut', lambda e=e: rClick_Cut(e)),
            ('Copy', lambda e=e: rClick_Copy(e)),
            ('Paste', lambda e=e: rClick_Paste(e)),
            ('Seperator', ''),
            ('Select All', lambda e=e: rClick_SelectA(e)),
            ]
     rmenu = Menu(None, tearoff=0, takefocus=0)
     for (txt, cmd) in nclst:
         if txt == 'Seperator':
             rmenu.add_separator()
             continue
         rmenu.add_command(label=txt, command=cmd,) #image=self._img4 <add this in when using icons.
     rmenu.tk_popup(e.x_root+40, e.y_root+10,entry="0")
except TclError:
    print ' - rClick menu, something wrong'
    pass

Меню правого клика:

The Right Click Menu

Меню правого клика с иконками:

The Right Click Menu With Icons

1 Ответ

1 голос
/ 04 апреля 2019

Подобно кнопкам, меню и меткам, пункты меню могут поддерживать как текст, так и изображения. Для этого вы должны использовать опцию compound, чтобы сообщить tkinter, где вы хотите, чтобы изображение появилось относительно текста. Доступны следующие значения параметров: нижний, центральный, левый, нулевой, правый и верхний.

Например, чтобы изображение появилось слева, используйте compound='left':

rmenu.add_command(label=txt, image=self._img4, compound='left', command=cmd)

Примечание: действительные позиции в некоторой степени зависят от платформы. Например, в OSX изображение, кажется, всегда появляется слева от текста, независимо от того, что вы установили для compound.

...