- Введение в GNU/Linux
- Работа в графических средах (KDE, Gnome)
- Командная оболочка (bash)
- Практические работы по OpenOffice
- Основы программирования (Python)
- Алгоритмы на Python
- Объектно-ориентированное программирование (Python)
- Программирование графического интерфейса (Tkinter)
- 2D анимация (Synfig)
- 3D моделирование (Blender)
- Blender Game Engine
Приложения с графическим интерфейсом пользователя (GUI) должны не просто красиво отображаться на экране, но и выполнять какие-либо действия, реализуя тем самым потребности пользователя. На прошлых уроках было рассказано как создать GUI, на этом уроке рассмотрим как добавить ему функциональность, т.е возможность совершать с его помощью те или иные действия. В отличие от консольных приложений, которые обычно выполняются при минимальных внешних воздействиях, графическое приложение обычно ждет каких-либо внешних воздействий (щелчков кнопкой мыши, нажатий клавиш на клавиатуре, изменения виджетов) и затем выполняет заложенное программистом действие. Из такого принципа работы можно вывести следующую схему настройки функциональности GUI: на виджет что-то «влияет» из вне ? выполняется какая-то функция (действие). Внешнее воздействие на графический компонент называется событием. Событий достаточно много (основной их перечень мы рассмотрим на следующем занятии). На этом занятии будем использовать лишь два вида событий: щелчок левой кнопкой мыши ( Одним из способов связывания виджета, события и функции (того, что должно происходить после события) является использование метода bind. Синтаксис связывания представлен на рисунке ниже. ![]() Рассмотрим различные примеры добавления функциональности GUI. Пример 1. def output(event): s = ent.get() if s == "1": tex.delete(1.0,END) tex.insert(END,"Обслуживание клиентов на втором этаже") elif s == "2": tex.delete(1.0,END) tex.insert(END,"Пластиковые карты выдают в соседнем здании") else: tex.delete(1.0,END) tex.insert(END,"Введите 1 или 2 в поле слева") from tkinter import * root = Tk() ent = Entry(root,width=1) but = Button(root,text="Вывести") tex = Text(root,width=20,height=3,font="12",wrap=WORD) ent.grid(row=0,column=0,padx=20) but.grid(row=0,column=1) tex.grid(row=0,column=2,padx=20,pady=10) but.bind("<Button-1>",output) root.mainloop() Рассмотрим код, начиная с 16-й строки. В строках 16-18 создаются три виджета: однострочное текстовое поле, кнопка и многострочное текстовое поле. В первое поле пользователь должен что-то ввести, затем нажать кнопку и получить ответ во втором поле. В строках 20-22 используется менеджер grid для размещения виджетов. Свойства padx и pady определяют количество пикселей от виджета до края рамки (или ячейки) по осям x и y соответственно. В стоке 24 как раз и происходит связывание кнопки с событием нажатия левой кнопки мыши и функцией output. Все эти три компонента (виджет, событие и функция) связываются с помощью метода bind. В данном случае, при нажатии левой кнопкой мыши по кнопке but будет вызвана функция output. Итак, если вдруг пользователь щелкнет левой кнопкой мыши по кнопке, то выполнится функция output (ни в каком другом случае она выполняться не будет). Данная функция (строки 1-11) выводит информацию во второе текстовое поле. Какую именно информацию, зависит от того, что пользователь ввел в первое текстовое поле. В качестве аргумента функции передается событие (в данном случае Внутри веток if-elif-else используются методы delete и insert. Первый из них удаляет символы из текстового поля, второй — вставляет. 1.0 — обозначает первую строку, первый символ (нумерация символов начинается с нуля). Пример 2. li = ["red","green"] def color(event): fra.configure(bg=li[0]) li[0],li[1] = li[1],li[0] def outgo(event): root.destroy() from tkinter import * root = Tk() fra = Frame(root,width=100,height=100) but = Button(root,text="Выход") fra.pack() but.pack() root.bind("<Return>",color) but.bind("<Button-1>",outgo) root.mainloop() Здесь создаются два виджета (строки 12, 13): фрейм и кнопка. Приложение реагирует на два события: нажатие клавиши Enter в пределах главного окна (строка 18) и нажатие левой кнопкой мыши по кнопке but (строка 19). В первом случае вызывается функция color, во втором — outgo. Функция color изменяет цвет фона (bg) фрейма (fra) с помощью метода configure, который предназначен для изменения значения свойств виджетов в процессе выполнения скрипта. В качестве значения опции bg подставляется первый элемент списка. Затем в списке два элемента меняются местами, чтобы при следующем нажатии Enter цвет фрейма снова изменился. В функции outgo вызывается метод destroy по отношению к главному окну. Данный метод предназначен для «разрушения» виджета (окно закроется). Практическая работа
|
|||

