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

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

Жанры

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

foreground=mycolor1, # fg, текст виджета

background="#0000FF», # bg, фон виджета

highlightcolor='green', # подсветка при фокусе

highlightbackground='red', # подсветка без фокуса

).pack

tv.set(«123»)

tk.mainloop

При желании можно задать стилевые опции для всех виджетов сразу: с помощью метода tk_setPalette. Помимо использованных выше свойств в этом методе можно использовать selectForeground и selectBackground (передний план и фон выделения), selectColor (цвет

в выбранном состоянии, например, у Checkbutton), insertBackground (цвет точки вставки) и некоторые другие.

Примечание:

Получить значение из поля ввода можно и при помощи метода get. Например, если назвать объект класса Entry именем e, получить значение можно так: e.get. Правда, этот метод не обладает той же гибкостью, что метод get экземпляров класса для форматированного текста Text: можно взять только все значение целиком.

Виджет форматированного текста

Для того чтобы показать работу с нетривиальным виджетом, можно взять виджет ScrolledText из одноименного модуля Python. Этот виджет аналогичен рамке с форматированным текстом и вертикальной полосой прокрутки:

Листинг

from Tkinter import *

from ScrolledText import ScrolledText

tk = Tk # окно верхнего уровня

txt = ScrolledText(tk) # виджет текста с прокруткой

txt.pack # виджет размещается

for x in range(1, 1024): # виджет наполняется текстовым содержимым

txt.insert(END, str(2L**x)+»\n»)

tk.mainloop

Теперь следует рассмотреть методы и свойства виджета с форматированным текстом более подробно.

Для навигации в тексте в Tk предусмотрены специальные индексы. Индексы вроде 1.0 и END уже встречались — это начало текста (первая строка, нулевой символ) и его конец. (В Tk строки нумеруются с единицы, а символы строки — с нуля). Более полный список индексов:

L.C Здесь L — номер строки, а C — номер символа в строке.

INSERT Точка вставки.

CURRENT Символ, ближайший к курсору мыши.

END Позиция сразу за последним символом в тексте

M.first, M.last Индексы начала и конца помеченного тегом M участка текста.

SEL_FIRST, SEL_LAST Индексы начала и конца выделенного текста.

M Пользователь может определять свои именованные позиции в тексте (аналогично END, INSERT или CURRENT). При редактировании текста маркеры будут сдвигаться с заданными для них правилами.

@x,y Символ текста, ближайший к точке с координатами x, y.

Следующий пример показывает, как снабдить форматированный текст гипертекстовыми возможностями:

Листинг

from Tkinter import *

import urllib

tk = Tk

txt = Text(tk, width=64) # поле с текстом

txt.grid(row=0, column=0, rowspan=2)

addr=Text(tk, background=«White», width=64, height=1) #

поле адреса

addr.grid(row=0, column=1)

page=Text(tk, background=«White», width=64) # поле с html–кодом

page.grid(row=1, column=1)

def fetch_url(event):

click_point = "@%s,%s» % (event.x, event.y)

trs = txt.tag_ranges(«href») # список областей текста, отмеченных как href

url = ""

# определяется, на какой участок пришелся щелчок мыши, и берется

# соответствующий ему URL

for i in range(0, len(trs), 2):

if txt.compare(trs[i], "<=", click_point) and \

txt.compare(click_point, "<=", trs[i+1]):

url = txt.get(trs[i], trs[i+1])

html_doc = urllib.urlopen(url).read

addr.delete(«1.0», END)

addr.insert(«1.0», url) # URL помещается в поле адреса

page.delete(«1.0», END)

page.insert(«1.0», html_doc) # показывается HTML–документ

textfrags = [«Python main site: ", «http://www.python.org»,

«\nJython site: ", «http://www.jython.org»,

«\nThat is all!»]

for frag in textfrags:

if frag.startswith(«http:"):

txt.insert(END, frag, «href») # URL помещается в текст с меткой href

else:

txt.insert(END, frag) # фрагмент помещается в текст

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

txt.tag_config(«href», foreground=«Blue», underline=1)

# при щелчке мыши на тексте, отмеченном как «href»,

# следует вызывать fetch_url

txt.tag_bind(«href», "<1>", fetch_url)

tk.mainloop # запускается цикл событий

В результате (после нажатия на гиперссылку) можно увидеть примерно следующее:

Для придания некоторым участкам текста особых свойств необходимо их отметить тегом. В данном случае URL отмечается тегом href. Позднее с помощью метода tag_config задаются свойства отображения текста, отмеченного таким тегом. Методом tag_bind привязывается некоторое событие (щелчок мыши) с вызовом заданной функции (fetch_url).

В самой функции fetch_urlнужно в начале определить, на какой именно участок текста пришелся щелчок мыши. Для этого с помощью метода tag_ranges получаются все интервалы, которые отмечены как href. Для определения конкретного URL проводятся сравнения (методом compare) точки щелчка мышью с каждым из интервалов. Так находится интервал, на который попал щелчок, и с помощью метода getполучается текстовое значение найденного интервала. Найдя URL, его в поле записываются адреса, и получается HTML–код, соответствующий URL.

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

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

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
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