KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Роман Сузи - Язык программирования Python

Роман Сузи - Язык программирования Python

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Роман Сузи, "Язык программирования Python" бесплатно, без регистрации.
Перейти на страницу:

• Button (Кнопка) Простая кнопка для вызова некоторых действий (выполнения определенной команды).

• Canvas (Рисунок) Основа для вывода графических примитивов.

• Checkbutton (Флажок) Кнопка, которая умеет переключаться между двумя состояниями при нажатии на нее.

• Entry (Поле ввода) Горизонтальное поле, в которое можно ввести строку текста.

• Frame (Рамка) Виджет, который содержит в себе другие визуальные компоненты.

• Label (Надпись) Виджет может показывать текст или графическое изображение.

• Listbox (Список) Прямоугольная рамка со списком, из которого пользователь может выделить один или несколько элементов.

• Menu (Меню) Элемент, с помощью которого можно создавать всплывающие (popup) и ниспадающие (pulldown) меню.

• Menubutton (Кнопка–меню) Кнопка с ниспадающим меню.

• Message (Сообщение) Аналогично надписи, но позволяет заворачивать длинные строки и менять размер по требованию менеджера расположения.

• Radiobutton (Селекторная кнопка) Кнопка для представления одного из альтернативных значений. Такие кнопки, как правило, действует в группе. При нажатии на одну из них кнопка группы, выбранная ранее, «отскакивает».

• Scale (Шкала) Служит для задания числового значения путем перемещения движка в определенном диапазоне.

• Scrollbar (Полоса прокрутки) Полоса прокрутки служит для отображения величины прокрутки в других виджетах. Может быть как вертикальной, так и горизонтальной.

• Text (Форматированный текст) Этот прямоугольный виджет позволяет редактировать и форматировать текст с использованием различных стилей, внедрять в текст рисунки и даже окна.

• Toplevel (Окно верхнего уровня) Показывается как отдельное окно и содержит внутри другие виджеты.

Все эти классы не имеют отношений наследования друг с другом — они равноправны. Этот набор достаточен для построения интерфейса в большинстве случаев.

События

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

Тип события Содержание события Activate Активизация окна ButtonPress Нажатие кнопки мыши ButtonRelease Отжатие кнопки мыши Deactivate Деактивация окна Destroy Закрытие окна Enter Вхождение курсора в пределы виджета FocusIn Получение фокуса окном FocusOut Потеря фокуса окном KeyPress Нажатие клавиши на клавиатуре KeyRelease Отжатие клавиши на клавиатуре Leave Выход курсора за пределы виджета Motion Движение мыши в пределах виджета MouseWheel Прокрутка колесика мыши Reparent Изменение родителя окна Visibility Изменение видимости окна

Примеры описаний событий строками и некоторые названия клавиш приведены ниже:

"<ButtonPress–3>" или просто "<3>" — щелчок правой кнопки мыши (то есть, третьей, если считать на трехкнопочной мыши слева–направо). "<Shift–Double–Button–1>" — двойной щелчок мышью (левой кнопкой) с нажатой кнопкой Shift. В качестве модификаторов могут быть использованы следующие (список неполный):

Control, Shift, Lock,

Button1–Button5 или B1–B5,

Meta, Alt, Double, Triple.

Просто символ обозначает событие — нажатие клавиши. Например, «k» — тоже, что "<KeyPress–k>". Для неалфавитно–цифровых клавиш есть специальные названия:

Cancel, BackSpace, Tab, Return, Shift_L, Control_L, Alt_L,

Pause, Caps_Lock, Escape, Prior, Next, End, Home, Left,

Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7,

F8, F9, F10, F11, F12, Num_Lock, Scroll_Lock, space, less

Здесь <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: %sn" % (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_.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*