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

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

Жанры

Язык программирования 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!»,

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

Компас желаний

Кас Маркус
8. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Компас желаний

Технарь

Муравьёв Константин Николаевич
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Технарь

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая

Законы Рода. Том 12

Андрей Мельник
12. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 12

Законы Рода. Том 10

Андрей Мельник
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Требую развода! Что значит- вы отказываетесь?

Мамлеева Наталья
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Требую развода! Что значит- вы отказываетесь?

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Сын Тишайшего 3

Яманов Александр
3. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Сын Тишайшего 3

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5