Главная страница
Навигация по странице:

  • Button 1, B 1

  • Mod4, M4 Mod5, M5 Meta, M Double

  • Activate, Deactivate MouseWheel

  • Configure

  • Visibility Expose

  • Property Colormap MapRequest, CirculateRequest, ResizeRequest, ConfigureRequest, Create Gravity, Reparent, Circulate

  • Разработка web-приложения. ЛР по ВТП для ВТ (Питон). Методические указания к лабораторным работам для студентов, обучающихся в бакалавриате по направлениям


    Скачать 2.07 Mb.
    НазваниеМетодические указания к лабораторным работам для студентов, обучающихся в бакалавриате по направлениям
    АнкорРазработка web-приложения
    Дата18.05.2022
    Размер2.07 Mb.
    Формат файлаdoc
    Имя файлаЛР по ВТП для ВТ (Питон).doc
    ТипМетодические указания
    #536632
    страница9 из 10
    1   2   3   4   5   6   7   8   9   10

    Обработка событий

    Цель работы: изучение и практическое закрепление методов обработки событий, генерируемых клавиатурой и мышью.
    Введение

    Появление графического пользовательского интерфейса обусловило появление и событийного программирования, которое рассматривает программное приложение как набор подпрограмм-обработчиков событий. Исходно все события делятся на две группы: генерируемые пользователем и генерируемые аппаратно-программной системой. К последним относится, например, системные средства работы со временем, которые были уже рассмотрены в предыдущих лабораторных работах.

    Пользователь может генерировать события с помощью мыши, клавиатуры или виджетов интерфейса. Большинство из этих событий перечислено ниже.

    На основе мыши выделяются события: нажатие клавиши, нажатие комбинации клавиш, отпускание клавиши и прокрутка колеса. Вот их перечень:

    • – клик левой кнопкой мыши.

    • – клик средней кнопкой мыши.

    • – клик правой кнопкой мыши.

    • – двойной клик левой кнопкой мыши.

    • – движение мыши над виджетом (только для менеджера геометрии place()).

    • - нажатие любой клавиши мыши.

    • - отжатие (отпускание) любой клавиши мыши.

    • - прокрутка колесика мыши.

    • - левая кнопка мыши отпущена.

    • - левая кнопка мыши отпущена после двойного щелчка.

    События, связанные с манипулированием виджетами:

    • - вхождение курсора в пределы виджета.

    • - выход курсора за пределы виджета.

    • - получение фокуса виджетом.

    • - уход фокуса из виджета.

    • - изменение размеров окна.

    Фокус перемещается по виджетам при нажатии Tab, Ctrl+Tab, Shift+Tab, а также при клике по ним мышью.

    События, генерируемые клавиатурой:

    • Нажатие клавиши …

    • Нажатие сочетания клавиш …

    При этом существуют следующие правила синтаксиса для фиксации событий с клавиатурой:

    • Буквенные клавиши можно записывать без угловых скобок (например, 'L') или в угловых скобках (например, "").

    • Для неалфавитных клавиш существуют специальные зарезервированные слова:

    • ” - нажатие клавиши Enter;

    • "" – нажатие любой алфавитно-цифровой клавиши;

    • ” - любая клавиша отпущена;

    • ” - пробел и т. д.

    • Сочетания клавиш пишутся через тире. Например:

    ” - одновременное нажатие клавиш Ctrl и Shift.

    '’ – комбинация из трех клавиш.

    Использование событий

    В отличие от визуальных ИСП, где сначала определяются виджеты, затем выбираются ассоциированные с ними события и формируются для них процедуры-обработчики, программирование на базе модуля tkinter предполагает сначала выбор события, создание функции-обработчика, и только после этого привязку события к какому-то виджету.

    Привязка может происходить двумя способами.

    1) В первом случае привязка обработчика и самого события реализуется через свойство виджета 'command' и имеет вид:

    <виджет>(command = <обработчик-вызываемая функция>).pack()

    2) Для расширения перечня возможных событий можно использовать метод виджетов bind(). У него, как минимум, должен быть один параметр. Обычно его называют event (событие). Структура привязки в этом случае имеет вид:

    < виджет>.bind(<событие>, <обработчик-вызываемая функция>).

    Т.е. здесь обязательно наличие у виджета идентификатора, а менеджера геометрии pack или place должны указываться уже после объявления виджета.

    Метод bind() имеет несколько версий:

    • bind(event, method) привязывает событие к определенному экземпляру элемента управления;

    • bind-class(class, event, method) привязывает событие к классу элементов управления;

    • bind-all(event, method) привязывает событие ко всему приложению [всем элементам управления].

    Объект класса Event имеет следующие атрибуты:

    • serial - серийный номер события (все события)

    • num - номер кнопки мыши (ButtonPress, ButtonRelease)

    • focus - имеет ли окно фокус (Enter, Leave)

    • height и width - ширина и высота окна (Configure, Expose)

    • keycode - код нажатой клавиши (KeyPress, KeyRelease)

    • state - состояние события (для ButtonPress, ButtonRelease, Enter, KeyPress, КeyRelease, Leave, Motion - в виде числа; для Visibility - в виде строки)

    • time - время наступления события (все события)

    • x и y - координаты мыши

    • x_root и y_root - координаты мыши на экране (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion)

    • char - набранный на клавиатуре символ (KeyPress, KeyRelease)

    • send_event - см. документацию по X/Windows

    • keysym - набранный на клавиатуре символ (KeyPress, KeyRelease)

    • keysym_num - набранный на клавиатуре символ в виде числа (KeyPress, KeyRelease)

    • type - тип события в виде числа (все события)

    • widget - виджет, который получил событие (все события)

    • delta - изменение при вращении колеса мыши (MouseWheel)

    Список модификаторов

    • Return - Enter

    • Escape - Esc

    • Control - Ctrl

    • Alt

    • Shift

    • Lock

    • Extended

    • Prior - PgUp

    • Next - PgDown

    • Button1, B1 - нажата первая (левая) кнопка мыши

    • Button2, B2 - вторая (средняя) кнопка мыши

    • Button3, B3 - третья (правая)

    • Button4, B4 - четвёртая

    • Button5, B5 - пятая

    • Mod1, M1, Command

    • Mod2, M2, Option

    • Mod3, M3

    • Mod4, M4

    • Mod5, M5

    • Meta, M

    • Double - двойной щелчок мыши (например, )

    • Triple - тройной

    • Quadruple - четверной

    Типы событий

    Здесь перечислены все возможные типы событий, для самых часто используемых дано описание. Более подробно см. man bind.

    • Activate, Deactivate

    • MouseWheel - прокрутка колесом мыши

    • KeyPress, KeyRelease - нажатие и отпускание клавиши на клавиатуре

    • ButtonPress, ButtonRelease, Motion - нажатие, отпускание клавиши мыши, движение мышью

    • Configure - изменение положения или размера окна

    • Map, Unmap - показывание или сокрытие окна (например, в случае сворачивания/разворачивания окна пользователем)

    • Visibility

    • Expose - событие генерируется, когда необходимо всё окно или его часть перерисовать

    • Destroy - закрытие окна

    • FocusIn, FocusOut - получение или лишение фокуса

    • Enter, Leave - Enter генерируется когда курсор мыши "входит" в окно, Leave - когда "уходит" из окна

    • Property

    • Colormap

    • MapRequest, CirculateRequest, ResizeRequest, ConfigureRequest, Create

    • Gravity, Reparent, Circulate

    Клавиатурные символы

    Полный список см. man keysyms.

    Примеры

     или <1> - нажата левая клавиша мыши.

     - движение мышью с нажатой на клавиатуре клавишей Alt.

     - нажатие любой клавиши на клавиатуре.


    Выполнение лабораторной работы

    I. В соответствии с вариантами разработать проект, реализующий требуемую задачу:

    В-1. Линейка прокрутки определяет сторону квадрата или радиуса окружности в диапазоне 40  80 пикселей. Нажатие левой клавиши мыши приводит к созданию на канве квадрата, правый нижний угол которого находится в месте курсора, а правой - окружности, центр которой находится в месте курсора. Цвет контура фигуры определяется случайно а диапазоне 30000  3000000 и выводится в редакторе Entry. Нажатие клавиши  или  приводит к дублированию фигуры со сдвигом на 1 пиксель соответственно влево или вправо.

    В-2. Линейка прокрутки определяет сторону фигуры в диапазоне 50  100 пикселей. Щелчок мыши по канве при нажатой клавише Shift приводит к созданию квадрата с центром в этой точке, а при нажатой клавише Alt – к созданию прямоугольника с высотой, заданной линейкой прокрутки, и шириной в два раза меньше высоты. Правый нижний угол прямоугольника находится в месте курсора. Цвет заливки фигуры меняется при нажатии клавиши F2 случайно в диапазоне 1  10000000 и выводится на заголовке формы.

    В-3. Линейка прокрутки определяет радиус окружности в диапазоне 60  110 пикселей. Щелчок мыши по форме при нажатой клавише Alt приводит к созданию окружности, центр которой находится выше курсора на величину радиуса, а при нажатой клавише Ctrl – центр окружности находится справа на таком же расстоянии. Цвет контура окружности задается второй линейкой прокрутки в диапазоне 1200 – 24000 и выводится на метку. Клавиши  и  меняют толщину контура фигуры в диапазоне 1  5 пикселей. Исходно толщина равна 3 пикселям.

    В-4. Одна линейка прокрутки определяет цвет фона окна (диапазон 2000 – 4000), а другая – цвет карандаша для рисования мышью (диапазон 0 – 1999). Рисование при нажатии левой клавиши мыши производится толщиной в 1 пиксель, а правой - 4 пикселя. Клавиша Delete очищает поле рисования.

    В-5. Каждое щелчок мыши по канве при нажатой клавише Alt приводит к созданию окружности, радиус которой увеличивается на 1, а при нажатой клавише Ctrl – уменьшается на 1. Центр окружности – положение мыши. Цвет контура окружности равен произведению координат Х и У мыши, а начальное значение радиуса 60 пикселей. Толщина окружности в диапазоне 1-10 пикселей задается линейкой прокрутки. Нажатие клавиши Insert приводит к заполнению последней окружности зеленым фоном

    В-6. Движение мыши при нажатой правой клавише приводит к постоянному созданию на канве квадратов со стороной 40 пикселей, цвет контура которых непрерывно растет, начиная с 1000. Движение при нажатой левой клавише приводит к непрерывной смене цвета заливки квадрата, уменьшаясь с 400000. Толщина контура квадрата в диапазоне 1-10 пикселей задается линейкой прокрутки. Нажатие клавиши Delete приводит к стиранию предыдущей фигуры.

    В-7. Первая линейка прокрутки определяют сторону фигуры в диапазоне 70  110 пикселей. Нажатие клавиши Ctrl при движении мыши приводит к созданию на канве квадрата, центр которого находится справа от курсора мыши на расстоянии 30 пикселей, а правой кнопки мыши - равнобедренного треугольника, вершина которого совпадает с положением курсора. Изменение размера формы отменяет действие клавиши Ctrl. Цвет контура фигуры задается второй линейкой прокрутки в диапазоне 20000 – 2000000 и выводится в редакторе Text. Нажатие клавиши Home приводит к дублированию фигуры внутри последней нарисованной, новая в два раза меньше.

    В-8. Линейка прокрутки определяет радиус окружности в диапазоне 60  110 пикселей. Нажатие клавиши Alt при движении мыши по канве приводит к созданию окружности, центр которой находится ниже курсора на величину радиуса. Если при этом еще нажимается правая клавиша мыши, то окружность заполняется фоном синего цвета. Толщина контура окружности задается второй линейкой прокрутки в диапазоне 1 – 4 и выводится на кнопке Button. Клавиша F3 меняет ориентацию первой линейки прокрутки.

    В-9. Линейки прокрутки определяют стороны прямоугольника в диапазоне 50 – 150 пикселей. Клик мыши на канве при нажатой клавише Ctrl приводит к созданию эллипса, центр которого находится справа от курсора на расстоянии 30 пикселей, а при нажатой клавише Shift - прямоугольника, центр которого находится в месте нажатия мыши. Цвет контура фигуры задается случайно в диапазоне 20000 – 2000000 и выводится в редакторе Entry. Клавиши  и  меняют толщину контура фигуры в диапазоне 1  5 пикселей. Исходно толщина равна 3 пикселям.

    В-10. На канве находятся три окружности диаметром 20, 40 и 60 пикселей разного цвета. Щелчок мыши внутри конкретной окружности приводит к изменению цвета заливки на значение, которое задается линейкой прокрутки из 5 цветов. Нажатие клавиши End приводи к смене местами окружностей диаметром в 20 и 60 пикселей.

    В-11. Нажатие мыши на канве приводит к соединению отрезком места нажатия с местом предыдущего нажатия. Одна линейка прокрутки определяет цвет (1  15), вторая - толщину (1  5) отрезков. Если при этом нажимается левая кнопка мыши, то соединение производится пунктиром, правая кнопка - сплошной линией, двойной щелчок - стрелкой. Клавиша F3 меняет назначение линеек прокрутки.

    В-12. На канве находится квадрат со стороной 30 пикселей. Каждое нажатие мыши на пространстве канвы при нажатой клавише Ctrl приводит к сдвигу квадрата вверх на 10 пикселей, а при нажатой клавише Alt – вниз на 10 пикселей, при этом на каждом шаге квадрат сдвигается вправо на число пикселей, задаваемое линейкой прокрутки в диапазоне 4  10. Клавиша F7 делает контур квадрата зеленым, а F8 - желтым.

    В-13. На канве находится окружность с радиусом 50 пикселей. При движении вверх мыши при нажатой левой клавише радиус окружности растет, а при движении вниз - уменьшается. Если нажата правая клавиша - наблюдается обратный эффект. Линейка прокрутки меняет толщину генерируемой окружности в диапазоне 1  5. Клавиши F3 и F4 создают и устраняют заливку окружности коричневым цветом.

    В-14. Движение мыши по канве при нажатой клавише Shift приводит к созданию окружностей с радиусом 40 пикселей, а при нажатой клавише Alt – квадрата со стороной 50 пикселей. Центры фигур – координаты мыши. Цвет контура фигуры задается линейкой прокрутки в диапазоне 2000  400000. Номер цвет отображается в заголовке формы. Нажатие клавиши End приводит к очистке пространства рисунка.

    В-15. При движении мыши по канве на двух метках отображаются текущие координаты Х и У мыши. Когда Х=У в этом месте появляется точка диаметром 5 пикселей. Цвет точки задается линейкой прокрутки в диапазоне 20  4000. Нажатие клавиши Insert приводит к превращению последней точки в квадрат со стороной 40 пикселей, у которого в месте курсора находится правый нижний угол.

    В-16. На форме находится кнопка Button в виде квадрата. При нажатой левой клавише, когда мышь попадает на её поверхность, кнопка становится невидимой. При нажатой правой клавише кнопка закрашивается цветом, задаваемым линейкой прокрутки в диапазоне 30  30000. Видимость кнопке возвращает нажатие на колесико мыши на пространстве формы приложения. Клавиша F5 меняет сторону квадрата между значениями 140 – 280 пикселей.

    В-17 На форме находится метка в виде прямоугольника размером 100х40 пикселей. Если мышь попадает на неё, она сдвигается (при нажатой клавише Shift) вверх на n пикселей, при нажатой клавише Ctrl - влево на n пикселей. При отводе мыши метка возвращается на место. Число n задается линейкой прокрутки в диапазоне 1  40. Нажатие клавиши-буквы П меняет ориентацию прямоугольника.

    В-18. Линейка прокрутки задает цвет заливки квадрата-метки в диапазоне 500 1000. Нажатие мыши приводит к созданию метки со стороной 80 пикселей, правый нижний угол (нажата левая кнопка мыши) или левый нижний (нажата правая кнопка мыши) которого находится в месте курсора. Квадрат перемещается вместе с мышью, а при отпускании мыши исчезает. Клавиши З, К и Ж меняют цвет квадрата (зеленый, красный и желтый соответственно).

    В-19. Одна линейка прокрутки определяет высоту прямоугольника, а вторая - ширину в диапазоне 50  100 пикселей. Нажатие правой клавиши мыши по канве (при нажатой клавише Shift) приводит к созданию прямоугольника, центр которого находится в месте курсора, а если была нажата клавиша Ctrl - эллипса, вписанного в заданный прямоугольник. Цвет заливки фигуры определяется случайно и выводится в редакторе Entry. Клавиши 1, 2 и 3 меняют толщину контура фигуры в пикселях.

    В-20. Линейка прокрутки определяет толщину окружности в диапазоне 6  11 пикселей. Нажатие правой кнопки мыши на канве (при нажатой клавише Alt) приводит к созданию окружности радиусом 50 пикселей, центр которой находится справа от курсора на величину диаметра. Цвет контура окружности задается второй линейкой прокрутки в диапазоне 1200  24000 и выводится на заголовке формы. Если при этом была нажата клавиша Shift, то окружность дополнительно заполняется желтым цветом. Нажатие клавиш  или  приводит к дублированию созданной фигуры выше или ниже на 10 пикселей относительно созданной.

    В-21. Одна линейка прокрутки определяет цвет фона прямоугольника (диапазон 200  4000) размером 60х80, а другая – цвет его контура (диапазон 0  19). Щелчок левой кнопки мыши по канве приводит к созданию прямоугольника, левый верхний угол которого находится в месте нажатия мыши. При клике правой кнопкой центр прямоугольника находится в месте нажатия. Если при этом была нажата клавиша Ctrl, то толщина контура прямоугольника составляет 6 пикселей, клавиша Delete – 3 пикселя. Клавиша F8 меняет ориентацию создаваемого прямоугольника.

    В-22. Каждое нажатие мыши на канве приводит к созданию окружности, центр которой сдвинут вправо на 50 пикселей относительно места нажатия. Если при этом нажата клавиша Alt, то толщина контура увеличивается на 1 (до 10), а если клавиша Ctrl – уменьшается на 1 (до 1). Цвет окружности совпадает с координатой х мыши, а значение радиуса 60 пикселей. Цвет фона формы меняется линейкой прокрутки в диапазоне 500000  5000000. Нажатие клавиши Delete приводит к стиранию последней созданной фигуры.

    В-23. Движение мыши вправо по канве при нажатой её правой кнопке приводит к постоянному созданию квадратов со стороной 40 пикселей, влево - окружности радиусом 20 пикселей. Нажатие клавиши Home задает в месте мыши левый верхний угол квадрата, End – правый нижний. Центр создаваемой окружности находится в месте курсора мыши. Цвет контура фигуры определяется как 100*х, где х - координата мыши. Толщина контура фигур меняется линейкой прокрутки в диапазоне 1  7.

    В-24. Линейка прокрутки определяют сторону квадрата в диапазоне 50  110 пикселей. Нажатие мыши внутри квадрата приводит к созданию внутри квадрата вписанной окружности, нажатие мыши вне квадрата приводит к стиранию окружности. Цвет контура окружности определяется длиной стороны квадрата, умноженной на 10000. Каждое нажатие клавиши
    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта