c = Canvas(tk, height=300, bg="white") 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

c = Canvas(tk, height=300, bg="white")

Поиск

c = Canvas(tk, 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)

 

self.c = Canvas(self, height=300, bg="white") self.imgobj = self.c.create_image(0, 0)

 

self.c.pack()

 

def show_img(self):

 

filename = tkFileDialog.askopenfilename() if filename != ():

src_img = Image.open(filename) self.img = ImageTk.PhotoImage(src_img)

self.c.itemconfigure(self.imgobj, image=self.img,

anchor="nw")

 

app = App() app.mainloop()

 

 

В объекте заключена информация,которая до этого была глобальной со всеми следующими из этого ограничениями.Можно пойти дальше и выделить в отдельный метод настройку меню(если приложение будет динамически изменять меню,объекты-меню тоже могут быть сохранены в приложении).

 


Примечание:

 

На некоторых системах новые версииPythonплохо работают с национальными кодировками,в частности,с кодировками для кириллицы.Это связано с переходом наUnicode Tcl/Tk. Проблем можно избежать, если использовать кодировку UTF-8 в строках, которые должны выводиться в виджетах.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 60; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.146 (0.011 с.)