Теперь следует рассмотреть небольшое приложение, написанное с использованием Tkinter. В этом приложении будет загружен файл с графическим изображением. Приложение будет иметь простейшее меню File с пунктами Open и Exit, а также виджет Canvas, на котором и будут демонстрироваться изображения (опять потребуется пакет PIL):
from Tkinter import * import Image, ImageTk, tkFileDialog global img, imgobj
def show(): global img, imgobj # Запрос на имя файла filename = tkFileDialog.askopenfilename() if filename != (): # Если имя файла было задано пользователем # рисуется изображение из файла src_img = Image.open(filename) img = ImageTk.PhotoImage(src_img) # конфигурируется изображение на рисунке c.itemconfigure(imgobj, image=img, anchor="nw")
tk = Tk() main_menu = Menu(tk) # формируется меню tk.config(menu=main_menu) # меню добавляется к окну file_menu = Menu(main_menu) # создается подменю main_menu.add_cascade(label="File", menu=file_menu) # Заполняется меню File file_menu.add_command(label="Open", command=show) file_menu.add_separator() # черта для отделения пунктов меню file_menu.add_command(label="Exit", command=tk.destroy)
c = Canvas(tk, width=300, height=300, bg="white") # готовим объект-изображение на рисунке imgobj = c.create_image(0, 0) c.pack()
tk.mainloop()
Приложение (с загруженной картинкой) будет выглядеть так:

Стоит отметить, что здесь пришлось применить две глобальные переменные. Это не очень хорошо. Существует другой подход, когда приложение создается на основе окна верхнего уровня. Таким образом, само приложение становится особым виджетом. Переделанная программа представлена ниже:
from Tkinter import * import Image, ImageTk, tkFileDialog
class App(Tk): def __init__(self): Tk.__init__(self) main_menu = Menu(self) self.config(menu=main_menu) file_menu = Menu(main_menu) main_menu.add_cascade(label="File", menu=file_menu) file_menu.add_command(label="Open", command=self.show_img) file_menu.add_separator() file_menu.add_command(label="Exit", command=self.destroy)