Reputation: 27
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)
Upvotes: 0
Views: 1120
Reputation: 13061
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()
Upvotes: 0
Reputation: 1918
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.
Upvotes: 1