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

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

Жанры

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

Здесь <space> обозначает пробел, а <less> - знак меньше. <Left>, <Right>, <Up>, <Down> - стрелки. <Prior>, <Next> - это PageUp и PageDown. Остальные клавиши более или менее соответствуют надписям на стандартной клавиатуре.

Примечание:

Следует заметить, что Shift_L, в отличие от Shift, нельзя использовать как модификатор.

В конкретной среде комбинации, означающие что–то особенное в системе, могут не дойти до графического приложения. Например, известный всем Ctrl–Alt–Del.

Следующая

программа позволяет печатать направляемые виджету события, в частности — keysym, а также анализировать, как различные клавиши можно представить в шаблоне события:

Листинг

from Tkinter import *

tk = Tk # основное окно приложения

txt = Text(tk) # текстовый виджет, принадлежащий окну tk

txt.pack # располагается менеджером pack

# функция обработки события

def event_info(event):

txt.delete(«1.0», END) # удаляется с начала до конца текста

for k in dir(event): # цикл по атрибутам события

if k[0] != "_": # берутся только неслужебные атрибуты

# готовится описание атрибута события

ev = "%15s: %s\n» % (k, repr(getattr(event, k)))

txt.insert(END, ev) # добавляется в конец текста

# привязывается виджету txt функция event_info для обработки событий,

# соответствующих шаблону <KeyPress>

txt.bind("<KeyPress>", event_info)

tk.mainloop # главный цикл обработки событий

При нажатии клавиши Esc в окне можно увидеть примерно следующее:

Листинг

char: '\x1b'

delta: 9

height: 0

keycode: 9

keysym: 'Escape'

keysym_num: 65307

num: 9

send_event: False

serial: 159

state: 0

time: — 1072960858

type: '2'

widget: <Tkinter.Text instance at 0x401e268c>

width: 0

x: 83

x_root: 448

y: 44

y_root: 306

Следует объяснить некоторые из этих атрибутов:

char Нажатый символ (для некоторых событий - ??)

height, width Высота и ширина.

focus Был ли в момент события фокус у окна?

keycode Код символа (скан–код клавиатуры).

keysym Символическое имя клавиши.

serial Серийный номер события. Увеличивается по мере возникновения событий.

time Время возникновения события. Все время увеличивается.

widget Виджет, в котором возникло событие.

x, y Координаты указателя в виджете во время события.

x_root, y_root Координаты указателя на экране во время события.

В принципе, совсем необязательно, чтобы события обрабатывал тот же виджет, который их первично принял. Например, можно перенаправить все события внутри подчиненных виджетов на данный виджет с помощью метода grab_set (grab_release освобождает виджет от этой обязанности). В Tk существуют и другие возможности управления событиями, которые можно изучить по документации.

Создание и конфигурирование виджета

Создание виджета происходит вызовом конструктора соответствующего

класса. Вызов конструктора имеет следующий синтаксис:

Листинг

Widget([master[, option=value, …]])

Здесь Widget — класс виджета, master — виджет–хозяин, option и value — конфигурационная опция и ее значение (таких пар может быть несколько).

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

Листинг

widget.config(option=value, …)

widget[«option»] = value

value = widget[«option»]

widget.keys

В случае, когда имя свойства совпадает с ключевым словом языка Python, принято использовать после имени одиночное подчеркивание. Так, свойство class нужно задавать как class_, а to как to_.

Изменять конфигурацию виджета можно в любой момент. Это изменение прорисуется на экране по возвращении в цикл обработки событий или при явном вызове update_idletasks.

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

Листинг

from Tkinter import *

tk = Tk

tv = StringVar

Label(tk,

textvariable=tv,

relief=«groove»,

borderwidth=3,

font=(«Courier», 20, «bold»),

justify=LEFT,

width=50,

padx=10,

pady=20,

takefocus=False,

).pack

Entry(tk,

textvariable=tv,

takefocus=True,

).pack

tv.set(«123»)

tk.mainloop

В результате на экране можно увидеть:

Виджеты конфигурируются прямо при создании. Более того, виджеты не связываются с именами, их только располагают внутри виджета–окна. В данном примере использованы свойства textvariable (текстовая переменная), relief (рельеф), borderwidth (ширина границы), justify (выравнивание), width (ширина, в знакоместах), padx и pady (прослойка в пикселях между содержимым и границами виджета), takefocus (возможность принять фокус при нажатии клавиши Tab), font (шрифт, один из способов его задания). Эти свойства достаточно типичны для многих виджетов, хотя иногда единицы измерения могут отличаться, например, для виджета Canvas ширина задается в пикселях, а не в знакоместах.

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

Листинг

from Tkinter import *

tk = Tk

tv = StringVar

Entry(tk,

textvariable=tv,

takefocus=True,

borderwidth=10,

).pack

mycolor1 = "#%02X%02X%02X» % (200, 200, 20)

Entry(tk,

textvariable=tv,

takefocus=True,

borderwidth=10,

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

Я уже царь. Книга XXIX

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

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

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

Лихие. Смотрящий

Вязовский Алексей
2. Бригадир
Фантастика:
попаданцы
5.00
рейтинг книги
Лихие. Смотрящий

Неудержимый. Книга XXX

Боярский Андрей
30. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXX

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

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

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

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Как я строил магическую империю 10

Зубов Константин
10. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 10

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Сильнейший Столп Империи. Книга 4

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

Московское золото и нежная попа комсомолки. Часть Четвертая

Хренов Алексей
4. Летчик Леха
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Четвертая

Господин из завтра. Тетралогия.

Махров Алексей
Фантастика:
альтернативная история
8.32
рейтинг книги
Господин из завтра. Тетралогия.

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

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

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес