Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Этот пример показывает основные принципы работы с форматированным текстом. Примененными методами арсенал виджета не исчерпывается. О других методах и свойствах можно узнать из документации.

Менеджеры расположения

Следующий пример достаточно нагляден, чтобы понять принципы работы менеджеров расположения, имеющихся в Tk. В трех рамках можно применить различные менеджеры: pack, grid и place:

Листинг

from Tkinter import *

tk = Tk

# Создаем три рамки

frames = {}

b = {}

for fn in 1, 2, 3:

f = Frame(tk, width=100, height=200, bg=«White»)

f.pack(side=LEFT, fill=BOTH)

frames[fn] = f

for bn in 1, 2, 3, 4: #

Создаются кнопки для каждой из рамок

b[fn, bn] = Button(frames[fn], text="%s.%s» % (fn, bn))

# Первая рамка:

# Сначала две кнопки прикрепляются к левому краю

b[1, 1].pack(side=LEFT, fill=BOTH, expand=1)

b[1, 2].pack(side=LEFT, fill=BOTH, expand=1)

# Еще две — к нижнему

b[1, 3].pack(side=BOTTOM, fill=Y)

b[1, 4].pack(side=BOTTOM, fill=BOTH)

# Вторая рамка:

# Две кнопки сверху

b[2, 1].grid(row=0, column=0, sticky=NW+SE)

b[2, 2].grid(row=0, column=1, sticky=NW+SE)

# и одна на две колонки в низу

b[2, 3].grid(row=1, column=0, columnspan=2, sticky=NW+SE)

# Третья рамка:

# Кнопки высотой и шириной в 40% рамки, якорь в левом верхнем углу.

# Координаты якоря 1/10 от ширины и высоты рамки

b[3, 1].place(relx=0.1, rely=0.1, relwidth=0.4, relheight=0.4, anchor=NW)

# Кнопка строго по центру. Якорь в центре кнопки

b[3, 2].place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=CENTER)

# Якорь по центру кнопки. Координаты якоря 9/10 от ширины и высоты рамки

b[3, 3].place(relx=0.9, rely=0.9, relwidth=0.4, relheight=0.4, anchor=CENTER)

tk.mainloop

Результат следующий:

Менеджер pack просто заполняет внутреннее пространство на основании предпочтения того или иного края, необходимости заполнить все измерение. В некоторых случаях ему приходится менять размеры подчиненных виджетов. Этот менеджер стоит использовать только для достаточно простых схем расположения виджетов.

Менеджер grid помещает виджеты в клетки сетки (это очень похоже на способ верстки таблиц в HTML). Каждому располагаемому виджету даются координаты в одной из ячеек сетки (row — строка, column — столбец), а также, если нужно, столько последующих ячеек (в строках ниже или в столбцах правее) сколько он может занять (свойства rowspan или columnspan). Это самый гибкий из всех менеджеров.

Менеджер place позволяет располагать виджеты по произвольным координатам и с произвольными размерами подчиненных виджетов. Размеры и координаты могут быть заданы в долях от размера виджета–хозяина.

Непосредственно внутри одного виджета нельзя использовать более одного менеджера расположения: менеджеры могут наложить противоречащие ограничения на вложенные виджеты и внутренние виджеты просто не смогут быть расположены.

Изображения

в Tkinter

Средствами Tkinter можно выводить не только текст, примитивные формы (с помощью виджета Canvas), но и растровые изображения. Следующий пример демонстрирует вывод иконки с растровым изображением (для этого примера нужно предварительно установить пакет Python Imaging Library, PIL):

Листинг

import Tkinter, Image, ImageTk

FILENAME = «lena.jpg» # файл с графическим изображением

tk = Tkinter.Tk

c = Tkinter.Canvas(tk, width=128, height=128)

src_img = Image.open(FILENAME)

img = ImageTk.PhotoImage(src_img)

c.create_image(0, 0, image=img, anchor=«nw»)

c.pack

Tkinter.Label(tk, text=FILENAME).pack

tk.mainloop

В результате получается:

Здесь использован виджет–рисунок (Canvas). С помощью функций из пакетов Image и ImageTk из PIL получается объект–изображение, подходящее для включения в рисунок Tkinter. Свойство anchor задает угол, который привязывается к координатам (0, 0) в рисунке. В данном примере это северо–западный угол (NW — North–West). Другие возможности: n (север), w (запад), s (юг), e (восток), ne, sw, se и с (центр).

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

Листинг

from Tkinter import *

tk = Tk

# Рисунок 300x300 пикселей, фон — белый

c = Canvas(tk, width=300, height=300, bg=«white»)

c.create_arc((5, 5, 50, 50), style=PIESLICE) # Сектор («кусок пирога»)

c.create_arc((55, 5, 100, 50), style=ARC) # Дуга

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!»,

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9