Шрифт:
c.create_arc((105, 5, 150, 50), style=CHORD, # Сегмент
start=0, extent=150, fill=«blue») # от 0 до 150 градусов
# Ломаная со стрелкой на конце
c.create_line([(5, 55), (55, 55), (30, 95)], arrow=LAST)
# Кривая (сглаженная ломаная)
c.create_line([(105, 55), (155, 55), (130, 95)], smooth=1)
# Многоугольник зеленого цвета
c.create_polygon([(205, 55), (255, 55), (230, 95)], fill=«green»)
# Овал
c.create_oval((5, 105, 50, 120), )
# Прямоугольник красного цвета с большой серой границей
c.create_rectangle((105, 105, 150, 130), fill=«red»,
outline=«grey», width=«5»)
# Текст
c.create_text((5, 205), text=" Hello», anchor=«nw»)
# Эта точка визуально обозначает угол привязки
c.create_oval((5, 205, 6, 206), outline=«red»)
# Текст с заданным выравниванием
c.create_text((105, 205), text=«Hello,\nmy friend!»,
justify=LEFT, anchor=«c»)
c.create_oval((105, 205, 106, 206), outline=«red»)
# Еще один вариант
c.create_text((205, 205), text=«Hello,\nmy friend!»,
justify=CENTER, anchor=«se»)
c.create_oval((205, 205, 206, 206), outline=«red»)
c.pack
tk.mainloop
В результате работы этой программы на экране появится окно:
Следует заметить, что методы create_* создают объекты, свойства которых можно менять в дальнейшем: переместить в другое место, перекрасить, удалить, изменить порядок и т.д. В следующем примере можно нарисовать кружок, меняющий цвет по щелчку мыши:
Листинг
from Tkinter import *
from random import choice
colors = «Red Orange Yellow Green LightBlue Blue Violet».split
R = 10
tk = Tk
c = Canvas(tk, bg=«White», width=«4i», height=300, relief=SUNKEN)
c.pack(expand=1, fill=BOTH)
def change_ball(event):
c.coords(CURRENT, (event.x–R, event.y–R, event.x+R, event.y+R))
c.itemconfigure(CURRENT, fill=choice(colors))
oval = c.create_oval((100–R, 100–R, 100+R, 100+R), fill=«Black»)
c.tag_bind(oval, "<1>", change_ball)
tk.mainloop
Здесь нарисован кружок радиуса R , с ним связана функция change_ball по нажатию кнопки мыши. В указанной функции заданы новые координаты кружка (его центр расположен в месте щелчка мыши) и затем изменен цвет случайным образом методом itemconfigure. Тег CURRENT в Tkinter использован для указания объекта, который принял событие.
Графическое приложение на Tkinter
Теперь следует рассмотреть небольшое приложение, написанное с использованием 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 *