How to add image/icon in menu item on pysimplegui
Question:
I am using PySimplegui for UI development,want to know if there is a way to add menu icon as shown in the image below
this can be done with Tkinter and is working fine ,but i am failed to find any references in pysimplegui
any reference or link would be a great help
expecting this in menu item (image side by text)
Answers:
Not exactly what you are looking for, but consider another possibility. You can put Unicode characters in the menu label. For example, you can use for the Save All menu label, and for the Reload All from Disk menu label. The trick is finding an appropriate image for other menu labels which can require a bit of creativity.
It’s complex to add icons to menu items.
Here, add icons to menu items one by one by tkinter code.
import PySimpleGUI as sg
sg.theme('LightGreen')
menu_def = [
['&File', ['&Open Ctrl-O', '&Save Ctrl-S', '&Properties', 'E&xit']],
['&Edit', ['&Paste', ['Special', 'Normal', ], 'Undo', 'Options::this_is_a_menu_key'], ],
['&Toolbar', ['---', 'Command &1', 'Command &2',
'---', 'Command &3', 'Command &4']],
['&Help', ['&About...']]
]
layout = [
[sg.Menu(menu_def, key='-MENUBAR-')],
[sg.Output(size=(60, 10))],
]
window = sg.Window("Title", layout, finalize=True)
images = []
# Menu 1 - File
for i in range(4):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[0:4][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu'].entryconfigure(i, image=image, compound='left')
# Menu 2 - Edit
for i in range(3):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[4:7][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu2'].entryconfigure(i, image=image, compound='left')
# Menu 2 - Edit - Paste
for i in range(2):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[7:9][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu2'].children['!menu'].entryconfigure(i, image=image, compound='left')
# Menu 3 - Toolbar
for i, j in enumerate((1, 2, 4, 5)):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[9:13][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu3'].entryconfigure(j, image=image, compound='left')
# Menu 4 - Help
for i in range(1):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[13])
images.append(image)
window['-MENUBAR-'].widget.children['!menu4'].entryconfigure(i, image=image, compound='left')
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
print(event, values)
window.close()
I am using PySimplegui for UI development,want to know if there is a way to add menu icon as shown in the image below
this can be done with Tkinter and is working fine ,but i am failed to find any references in pysimplegui
any reference or link would be a great help
expecting this in menu item (image side by text)
Not exactly what you are looking for, but consider another possibility. You can put Unicode characters in the menu label. For example, you can use for the Save All menu label, and for the Reload All from Disk menu label. The trick is finding an appropriate image for other menu labels which can require a bit of creativity.
It’s complex to add icons to menu items.
Here, add icons to menu items one by one by tkinter code.
import PySimpleGUI as sg
sg.theme('LightGreen')
menu_def = [
['&File', ['&Open Ctrl-O', '&Save Ctrl-S', '&Properties', 'E&xit']],
['&Edit', ['&Paste', ['Special', 'Normal', ], 'Undo', 'Options::this_is_a_menu_key'], ],
['&Toolbar', ['---', 'Command &1', 'Command &2',
'---', 'Command &3', 'Command &4']],
['&Help', ['&About...']]
]
layout = [
[sg.Menu(menu_def, key='-MENUBAR-')],
[sg.Output(size=(60, 10))],
]
window = sg.Window("Title", layout, finalize=True)
images = []
# Menu 1 - File
for i in range(4):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[0:4][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu'].entryconfigure(i, image=image, compound='left')
# Menu 2 - Edit
for i in range(3):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[4:7][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu2'].entryconfigure(i, image=image, compound='left')
# Menu 2 - Edit - Paste
for i in range(2):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[7:9][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu2'].children['!menu'].entryconfigure(i, image=image, compound='left')
# Menu 3 - Toolbar
for i, j in enumerate((1, 2, 4, 5)):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[9:13][i])
images.append(image)
window['-MENUBAR-'].widget.children['!menu3'].entryconfigure(j, image=image, compound='left')
# Menu 4 - Help
for i in range(1):
image = sg.tk.PhotoImage(data=sg.EMOJI_BASE64_HAPPY_LIST[13])
images.append(image)
window['-MENUBAR-'].widget.children['!menu4'].entryconfigure(i, image=image, compound='left')
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
print(event, values)
window.close()