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

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

Жанры

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

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

Адвокат Империи 4

Карелин Сергей Витальевич
4. Адвокат империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Адвокат Империи 4

Тьма и Хаос

Владимиров Денис
6. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тьма и Хаос

Гримуар тёмного лорда I

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

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

Двойник короля 18

Скабер Артемий
18. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 18

Газлайтер. Том 27

Володин Григорий Григорьевич
27. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 27

Аватар

Жгулёв Пётр Николаевич
6. Real-Rpg
Фантастика:
боевая фантастика
5.33
рейтинг книги
Аватар

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II

Сильные

Олди Генри Лайон
Сильные
Фантастика:
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Сильные

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Отморозок 3

Поповский Андрей Владимирович
3. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 3

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Противостояние

Гаевский Михаил
2. Стратег
Фантастика:
боевая фантастика
космическая фантастика
5.25
рейтинг книги
Противостояние