Вызов изображения для нанесения на Label - Tkinter - Python - PullRequest
0 голосов
/ 26 ноября 2018

Я начинающий программист на Python.Я использую библиотеку Tkinter, чтобы создать окно с выпадающим меню.Я создал ярлык для отображения флага страны, когда элемент выбран в раскрывающемся меню.Но что-то идет не так, ничего не происходит.Вот мой код, я буду так благодарен за то, кто помогает мне, как его обработать и исправить.

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('image.png')
    flag = Label(root, text='teste', 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()

1 Ответ

0 голосов
/ 26 ноября 2018

Работает ли это для вас?

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...