Создание приложений с графическим интерфейсом

Содержание

Слайд 2

БИБЛИОТЕКА TKINTER ПОЧТИ ВСЕ СОВРЕМЕННЫЕ ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ ОБЩЕГО НАЗНАЧЕНИЯ СТРОЯТСЯ ПО

БИБЛИОТЕКА TKINTER

ПОЧТИ ВСЕ СОВРЕМЕННЫЕ ГРАФИЧЕСКИЕ ИНТЕРФЕЙСЫ ОБЩЕГО НАЗНАЧЕНИЯ СТРОЯТСЯ ПО МОДЕЛИ

WIMP - WINDOW, ICON, MENU, POINTER (ОКНО, ИКОНКА, МЕНЮ, КУРСОР [ОБЫЧНО МЫШИ]). ВНУТРИ ОКОН РИСУЮТСЯ ЭЛЕМЕНТЫ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА, ИМЕНУЕМЫЕ "ВИДЖЕТАМИ" (WIDGET - ШТУЧКА).
Слайд 3

Toplevel Окно верхнего уровня (корневой виджет) Button Кнопка. Простая кнопка для

Toplevel
Окно верхнего уровня (корневой виджет)
Button
Кнопка. Простая кнопка для выполнения команды и

других действий
Canvas
Рисунок. Может использоваться для вывода графических примитивов, например, для построения графиков
Checkbutton
Флажок. Кнопка, имеющая два состояния, при нажатии изменяет состояние на противоположное
Entry
Поле ввода текста
Frame
Рамка. Содержит в себе другие визуальные компоненты
Label
Этикетка. Показывает некоторый текст или графическое изображение
Listbox
Список. Показывает список, из которых пользователь может выделить один или несколько элементов
Слайд 4

Menu Меню. Служит для организации всплывающих (popup) и ниспадающих (pulldown) меню

Menu
Меню. Служит для организации всплывающих (popup) и ниспадающих (pulldown) меню
Menubutton
Кнопка-меню. Используется

для организации pulldown-меню
Message
Сообщение. Аналогично Label, но позволяет заворачивать длинные строки и легко меняет свой размер
Radiobutton
Переключатель. Представляет одно из альтернативных значений некоторой переменной. Обычно действует в группе. При нажатии на одну из кнопок, все остальные кнопки автоматически "отскакивают", совсем как кнопки выбора волны на радиоприемнике
Scale
Шкала. Позволяет задать числовое значение путем перемещения движка
Scrollbar
Полоса прокрутки. Может использоваться вместе с некоторыми другими компонентами для их прокрутки
Text
Форматированный текст. Позволяет показывать, редактировать и форматировать текст с использованием различных стилей, а также внедрять в текст рисунки и окна.
Слайд 5

Слайд 6

FROM TKINTER IMPORT * IMPORT MATH DEF SQUARE(RADIUS): RETURN MATH.PI *

FROM TKINTER IMPORT *
IMPORT MATH
DEF SQUARE(RADIUS):
RETURN MATH.PI * RADIUS**2


DEF CALCULATE_SQUARE():
RADIUS = FLOAT(RADIUS_ENTRY.GET())
TRY:
SQUARE = "%11.3F" % SQUARE(RADIUS)
EXCEPT:
SQUARE = "?"
SQUARE_LABEL.CONFIGURE(TEXT=SQUARE)
Слайд 7

ROOT = TK() ROOT.TITLE("ПЛОЩАДЬ КРУГА") FRAME = FRAME(ROOT) FRAME.PACK() RADIUS_ENTRY =

ROOT = TK()
ROOT.TITLE("ПЛОЩАДЬ КРУГА")
FRAME = FRAME(ROOT)
FRAME.PACK()
RADIUS_ENTRY = ENTRY(FRAME, WIDTH=10)
RADIUS_ENTRY.GRID(ROW=0, COLUMN=0)
SQUARE_LABEL =

LABEL(FRAME, TEXT="?")
SQUARE_LABEL.GRID(ROW=0, COLUMN=1)
EVAL_BUTTON = BUTTON(FRAME, TEXT="CALCULATE", WIDTH=10,
COMMAND=CALCULATE_SQUARE)
EVAL_BUTTON.GRID(ROW=1, COLUMN=0)
EXIT_BUTTON = BUTTON(FRAME, TEXT="EXIT", WIDTH=10,
COMMAND=ROOT.DESTROY)
EXIT_BUTTON.GRID(ROW=1, COLUMN=1)
ROOT.MAINLOOP()
Слайд 8

ОКНО ГРАФИЧЕСКОГО ПРИЛОЖЕНИЯ РАСПОЛОЖЕНИЕМ ВИДЖЕТОВ УПРАВЛЯЮТ МЕНЕДЖЕРЫ РАСПОЛОЖЕНИЯ. В TKINTER ИХ

ОКНО ГРАФИЧЕСКОГО ПРИЛОЖЕНИЯ

РАСПОЛОЖЕНИЕМ ВИДЖЕТОВ УПРАВЛЯЮТ МЕНЕДЖЕРЫ РАСПОЛОЖЕНИЯ. В TKINTER ИХ ТРИ

РАЗНОВИДНОСТИ:
PACK
"УПАКОВЫВАЕТ" ВИДЖЕТЫ ДРУГ К ДРУГУ ТАК, ЧТОБЫ ОНИ "ТЯГОТЕЛИ" К ОПРЕДЕЛЕННЫМ КРАЯМ. САМЫЙ ПРОСТОЙ ИЗ МЕНЕДЖЕРОВ РАСПОЛОЖЕНИЯ, НО ДОСТАТОЧЕН ДЛЯ МНОГИХ ЗАДАЧ.
GRID
РАСПОЛАГАЕТ ВИДЖЕТЫ В ЯЧЕЙКАХ ПРЯМОУГОЛЬНОЙ СЕТКИ (ПОЧТИ КАК В ЭЛЕКТРОННОЙ ТАБЛИЦЕ).
PLACE
РАСПОЛАГАЕТ ПОДЧИНЕННЫЕ ВИДЖЕТЫ ОТНОСИТЕЛЬНО ВИДЖЕТА-ХОЗЯИНА, В АБСОЛЮТНЫХ ИЛИ ОТНОСИТЕЛЬНЫХ КООРДИНАТАХ.
Слайд 9

КАЖДЫЙ ВИДЖЕТ МОЖЕТ ОБРАБАТЫВАТЬ ВОЗНИКАЮЩИЕ В НЕМ СОБЫТИЯ KEYPRESS НАЖАТИЕ КЛАВИШИ

КАЖДЫЙ ВИДЖЕТ МОЖЕТ ОБРАБАТЫВАТЬ ВОЗНИКАЮЩИЕ В НЕМ СОБЫТИЯ

KEYPRESS
НАЖАТИЕ КЛАВИШИ НА КЛАВИАТУРЕ
KEYRELEASE
ОТПУСКАНИЕ

КЛАВИШИ НА КЛАВИАТУРЕ
BUTTONPRESS
НАЖАТИЕ КНОПКИ МЫШИ
BUTTONRELEASE
ОТПУСКАНИЕ КНОПКИ МЫШИ
MOTION
ДВИЖЕНИЕ МЫШИ (В РАМКАХ КОМПЕТЕНЦИИ ВИДЖЕТА)

ENTER
ВХОЖДЕНИЕ КУРСОРА В ПРЕДЕЛЫ ВИДЖЕТА
LEAVE
ВЫХОД КУРСОРА ЗА ПРЕДЕЛЫ ВИДЖЕТА
MOUSEWHEEL
КРУЧЕНИЕ КОЛЕСИКА МЫШИ
VISIBILITY
ИЗМЕНЕНИЕ ВИДИМОСТИ ОКНА
FOCUSIN
ОКНО ПОЛУЧАЕТ ФОКУС

Слайд 10

FOCUSOUT ОКНО ТЕРЯЕТ ФОКУС REPARENT ИЗМЕНЕНИЕ РОДИТЕЛЯ ОКНА DESTROY УНИЧТОЖЕНИЕ ОКНА

FOCUSOUT
ОКНО ТЕРЯЕТ ФОКУС
REPARENT
ИЗМЕНЕНИЕ РОДИТЕЛЯ ОКНА
DESTROY
УНИЧТОЖЕНИЕ ОКНА
ACTIVATE
ОКНО СТАНОВИТСЯ АКТИВНЫМ
DEACTIVATE
ОКНО СТАНОВИТСЯ

ОПИСАНИЕ СОБЫТИЯ

ЗАДАЕТСЯ СТРОКОЙ (ЧАСТЬ ЭЛЕМЕНТОВ МОЖЕТ БЫТЬ ОПУЩЕНА):
<МОДИФИКАТОРЫ-ТИП-ДЕТАЛИЗАЦИЯ> НАПРИМЕР,
"" ИЛИ "<3>" -- НАЖАТИЕ ПРАВОЙ КНОПКИ МЫШИ
"" -- ДВОЙНОЙ ЩЕЛЧОК ЛЕВОЙ КНОПКИ МЫШИ
"" -- ДВОЙНОЙ ЩЕЛЧОК ЛЕВОЙ КНОПКИ МЫШИ ПРИ НАЖАТОЙ КЛАВИШЕ SHIFT
"" -- НАЖАТИЕ КЛАВИШИ ПРОБЕЛ
"K" -- НАЖАТИЕ КЛАВИШИ С СИМВОЛОМ "K"
Слайд 11

ПРИМЕР ПРОГРАММЫ, В КОТОРОЙ ТЕКСТОВОЕ ПОЛЕ ПЕРЕХВАТЫВАЕТ ДВИЖЕНИЯ МЫШИ И ПИШЕТ

ПРИМЕР ПРОГРАММЫ, В КОТОРОЙ ТЕКСТОВОЕ ПОЛЕ ПЕРЕХВАТЫВАЕТ ДВИЖЕНИЯ МЫШИ И ПИШЕТ

АТРИБУТЫ СОБЫТИЯ (EVENT)

FROM TKINTER IMPORT *
TK = TK()
TXT = TEXT(TK)
TXT.PACK()
DEF GIVE_INFO(EVENT):
# EVENT.WIDGET - ВИДЖЕТ, В КОТОРОМ ПРОИЗОШЛО СОБЫТИЕ
TXT.DELETE("1.0", END)
ITEMS = EVENT.__DICT__.ITEMS()
ITEMS.SORT()
FOR K, V IN ITEMS:
TXT.INSERT(END, "%S: %S\N" % (K, V))
TXT.BIND("", GIVE_INFO)
TK.MAINLOOP()

Слайд 12

from tkinter import * # подключение библиотеки tkinter # Создаем метку

from tkinter import * # подключение библиотеки tkinter
# Создаем метку и

прикрепляем ее к верху формы (окно программы):
Label(text = "Hello World").pack(side = TOP)
# Если явно в программе не создавать главное окно,
# то библиотека tkinter создаст его самостоятельно.
# Создаем функцию без параметров (обработчик нажатия кнопки):
def hello( ):
print("На кнопку нажали")
# Создаем кнопку, подключаем обработчик и прикрепляем
# ее к низу формы:
Button(text = "Hello event World",
command = hello).pack(side = BOTTOM)
# Запускаем цикл обработки сообщений:
mainloop()

Пример 1. Минимальная программа с визуальным
интерфейсом tkinter