Работает ли это для вас?
from tkinter import *
root = Tk()
root.geometry('500x450+450+150')
root.title('Python Program')
menu = Menu(root)
root.config(menu=menu)
def callFlag():
photo = PhotoImage(file='image.png')
flag = Label(root, text='teste', image=photo)
flag.image = photo
flag.pack()
subMenu = Menu(menu, tearoff=0)
menu.add_cascade(label='Bandeiras', menu=subMenu)
subMenu.add_command(label='Mongólia', command=callFlag)
subMenu.add_command(label='Opção 2', command=callFlag)
subMenu2 = Menu(menu, tearoff=0)
menu.add_cascade(label='Menu 2', menu=subMenu2)
subMenu2.add_command(label='Opção 1', command=callFlag)
subMenu2.add_command(label='Opção 2', command=callFlag)
subMenu2.add_separator()
subMenu2.add_command(label='Exit', command=exit)
root.mainloop()
Уловка, похоже, избегает сборки мусора в Python при выходе из функции, сохраняя дополнительную ссылку на photo
(flag.image = photo
).
Кроме того, вы можете определить изображение и флаг вместе со всем остальным и передать функцию pack()
флага в add_command
:
from tkinter import *
root = Tk()
root.geometry('500x450+450+150')
root.title('Python Program')
menu = Menu(root)
root.config(menu=menu)
photo = PhotoImage(file='image.png')
flag = Label(root, text='teste', image=photo)
subMenu = Menu(menu, tearoff=0)
menu.add_cascade(label='Bandeiras', menu=subMenu)
subMenu.add_command(label='Mongólia', command=flag.pack)
subMenu.add_command(label='Opção 2', command=flag.pack)
subMenu2 = Menu(menu, tearoff=0)
menu.add_cascade(label='Menu 2', menu=subMenu2)
subMenu2.add_command(label='Opção 1', command=flag.pack)
subMenu2.add_command(label='Opção 2', command=flag.pack)
subMenu2.add_separator()
subMenu2.add_command(label='Exit', command=exit)
root.mainloop()