Скачать презентацию Программирование на Python е Введение в информатику Глава 4 Скачать презентацию Программирование на Python е Введение в информатику Глава 4

Глава 4 Объекты и графика.ppt

  • Количество слайдов: 56

Программирование на Python’е: Введение в информатику Глава 4 Объекты и графика Python Programming, 2/e Программирование на Python’е: Введение в информатику Глава 4 Объекты и графика Python Programming, 2/e 1

Задачи n n n Понять концепцию объектов и того как их можно использовать для Задачи n n n Понять концепцию объектов и того как их можно использовать для упрощения программ. Познакомиться с различными объектами из графической библиотеки. Научиться создавать объекты в программах и вызывать нужные методы для выполнения наглядных вычислений. Python Programming, 2/e 2

Задачи (продолжение) n n Понять фундаментальные концепции компьютерной графики, в особенности роли координатной системы Задачи (продолжение) n n Понять фундаментальные концепции компьютерной графики, в особенности роли координатной системы и преобразования координат. Понять как работать с мышью и с текстовым вводом данных в контексте графического программирования. Python Programming, 2/e 3

Задачи (продолжение) n Научиться писать простые интерактивные графические программы, используя графическую библиотеку. Python Programming, Задачи (продолжение) n Научиться писать простые интерактивные графические программы, используя графическую библиотеку. Python Programming, 2/e 4

Обзор n n Каждый тип данных может представлять определённое множество значений, с которым связано Обзор n n Каждый тип данных может представлять определённое множество значений, с которым связано множество операций. Традиционный подход к программированию заключается в том, что данные пассивны – они обрабатываются и комбинируются активными операциями. Python Programming, 2/e 5

Обзор n n n Современные компьютерные программы создаются на основе объектноориентированного подхода. Большинство приложений, Обзор n n n Современные компьютерные программы создаются на основе объектноориентированного подхода. Большинство приложений, с которыми вы знакомы, имеют графический интерфейс пользователя, который предоставляет окна, пиктограммы, кнопки и меню. Графическая библиотека graphics. py написана специально для этого курса. Она основана на пакете tkinter. Python Programming, 2/e 6

Объекты из объектов n n n Основная идея ООП – рассматривать сложную систему как Объекты из объектов n n n Основная идея ООП – рассматривать сложную систему как взаимодействие более простых объектов. Объект это разновидность активных данных, нечто соединяющее в себе и данные и операции. Объекты содержат данные (имеют качественные и количественные характеристики) и обладают функциональностью (выполняют операции). Объекты взаимодействуют, посылая другу сообщения. Python Programming, 2/e 7

Объекты из объектов n n Допустим мы хотим разработать информационную систему для колледжа или Объекты из объектов n n Допустим мы хотим разработать информационную систему для колледжа или университета. Мы должны хранить записи о студентах, которые посещают занятия. Каждый студент будет представлен как объект. Python Programming, 2/e 8

Объекты из объектов n Объект-студент должен содержать такие данные: n n n Имя ID Объекты из объектов n Объект-студент должен содержать такие данные: n n n Имя ID номер Пройденные курсы Адрес общежития Домашний адрес др. Python Programming, 2/e 9

Объекты из объектов n n n Объект-студент должен также отвечать на запросы. Мы можем Объекты из объектов n n n Объект-студент должен также отвечать на запросы. Мы можем захотеть послать электронное письмо-приглашение всем студентам, для этого нам нужен домашний адрес каждого студента. Мы могли бы послать print. Home. Address каждому объекту-студенту. Когда объектстудент получает сообщение, он печатает свой собственный домашний адрес. Python Programming, 2/e 10

Объекты из объектов n n Объект может ссылаться на другие объекты. Каждый курс может Объекты из объектов n n Объект может ссылаться на другие объекты. Каждый курс может быть представлен объектом: n Инструктор n Расписание n Обязательные требования курсов n Где и когда встречается класс Python Programming, 2/e 11

Объекты из объектов n Стандартные операции n n add. Student del. Student change. Room Объекты из объектов n Стандартные операции n n add. Student del. Student change. Room и др. Python Programming, 2/e 12

Простое программирование графических данных n n Эта глава использует библиотеку graphics. py , поставляемую Простое программирование графических данных n n Эта глава использует библиотеку graphics. py , поставляемую с дополнительными учебными материалами. Два возможных местоположения n n В каталоге Lib, содержащемся в установочном каталоге Python’а, с другими библиотеками. В той же папке, что и ваши программы с использованием графики. Python Programming, 2/e 13

Простое программирование графических данных n n Так как это библиотека, то её нужно импортировать Простое программирование графических данных n n Так как это библиотека, то её нужно импортировать командой >>> import graphics Окно для графики это отмеченное место на экране, отведённое для нашей графики. >>> win = graphics. Graph. Win() n Эта команда создаёт новое окно, озаглавленное "Окно для графики". Python Programming, 2/e 14

Простое программирование графических данных n n Graph. Win это объект, назначенный переменной win. Мы Простое программирование графических данных n n Graph. Win это объект, назначенный переменной win. Мы можем работать с окном посредством этой переменной точно так, как мы работаем с файлом посредством файловой переменной. Окно можно закрыть/уничтожить, написав команду >>> win. close() Python Programming, 2/e 15

Простое программирование графических данных n n Довольно нудно постоянно писать graphics. Для доступа к Простое программирование графических данных n n Довольно нудно постоянно писать graphics. Для доступа к подпрограммам из графической библиотеки можно написать from graphics import * Оператор "from" позволяет вам загружать функции из библиотечного модуля. Знак "*" делает доступными все функции. Вместо "*" вы можете перечислить только нужные вам функции. Python Programming, 2/e 16

Простое программирование графических данных n В последнем случае вам не нужно будет приписывать командам Простое программирование графических данных n В последнем случае вам не нужно будет приписывать командам из библиотеки ссылку graphics. >>> from graphics import * >>> win = Graph. Win() Python Programming, 2/e 17

Простое программирование графических данных n n n Графическое окно это набор точек, называемых пикселами Простое программирование графических данных n n n Графическое окно это набор точек, называемых пикселами (picture elements). По умолчанию окно Graph. Win составляет 200 пиксел в высоту на 200 пиксел в длину (всего 40, 000 пиксел). Нарисовать картинку в окне можно задавая по пикселу за раз, что довольно утомительно. Графическая библиотека содержит большое число подпрограмм, рисующих графические фигуры. Python Programming, 2/e 18

Простое программирование графических данных n n Простейший объект это точка (Point). Как и в Простое программирование графических данных n n Простейший объект это точка (Point). Как и в геометрии местоположение точки задаётся в координатной системе парой (x, y), где x задаёт положение по горизонтали, а y положение точки по вертикали. Точка начала (0, 0) в графическом окне расположена в левом верхнем углу. Значения x возрастают слева направо, значения y сверху вниз. Координаты нижнего правого угла (199, 199) Python Programming, 2/e 19

Простое программирование графических данных >>> 50 >>> 60 >>> >>> p = Point(50, 60) Простое программирование графических данных >>> 50 >>> 60 >>> >>> p = Point(50, 60) p. get. X() p. get. Y() win = Graph. Win() p. draw(win) p 2 = Point(140, 100) p 2. draw(win) Python Programming, 2/e 20

Простое программирование графических данных >>> ### Открываем графическое окно >>> win = Graph. Win(‘Фигуры') Простое программирование графических данных >>> ### Открываем графическое окно >>> win = Graph. Win(‘Фигуры') >>> ### Рисуем красный круг с центром в точке (100, 100) с радиусом 30 >>> center = Point(100, 100) >>> circ = Circle(center, 30) >>> circ. set. Fill('red') >>> circ. draw(win) >>> ### Ставим текстовую подпись в центр круга >>> label = Text(center, "Красный круг") >>> label. draw(win) >>> ### Чертим квадрат, используя объектквадрат >>> rect = Rectangle(Point(30, 30), Point(70, 70)) >>> rect. draw(win) >>> ### Чертим отрезок, используя объект-прямую >>> line = Line(Point(20, 30), Point(180, 165)) >>> line. draw(win) >>> ### Чертим овал, используя объект-овал >>> oval = Oval(Point(20, 150), Point(180, 199)) >>> oval. draw(win) Python Programming, 2/e 21

Использование графических объектов n n Вычисления выполняются заблаговременно, чтобы выполнить необходимые операции. В предыдущем Использование графических объектов n n Вычисления выполняются заблаговременно, чтобы выполнить необходимые операции. В предыдущем примере мы работали с объектами, созданными с помощью Graph. Win, Point, Circle, Oval, Line, Text и Rectangle. Все они являются примерами классов. Python Programming, 2/e 22

Использование графических объектов n n Каждый объект является экземпляром класса. Класс описывает свойства экземпляра. Использование графических объектов n n Каждый объект является экземпляром класса. Класс описывает свойства экземпляра. Если мы говорим, что Sharik это собака, то мы в действительности говорим, что Sharik это конкретная особь большего класса всех собак. Sharik это экземпляр из класса собак. Python Programming, 2/e 23

Использование графических объектов n Чтобы создать новый экземпляр класса, мы используем специальную операцию, называемую Использование графических объектов n Чтобы создать новый экземпляр класса, мы используем специальную операцию, называемую конструктором. (, , …) n это имя класса, экземпляр которого мы хотим создать, например, Circle или Point. n Чтобы инициализировать объект, нужны параметры. Например, для объекта Point нужно задать два численных значения. Python Programming, 2/e 24

Использование графических объектов n n p = Point(50, 60) Конструктор для класса Point требует Использование графических объектов n n p = Point(50, 60) Конструктор для класса Point требует два параметра координаты x и y точки в окне. Эти значения хранятся как переменные экземпляра внутри объекта. Python Programming, 2/e 25

Использование графических объектов n Показаны только самые значимые переменные экземпляра (прочие включают цвет, содержащее Использование графических объектов n Показаны только самые значимые переменные экземпляра (прочие включают цвет, содержащее окно и т. п. ) Python Programming, 2/e 26

Использование графических объектов n n Чтобы объект выполнил операцию, мы посылаем объекту сообщение. Множество Использование графических объектов n n Чтобы объект выполнил операцию, мы посылаем объекту сообщение. Множество сообщений, на которые отвечает объект называется методами объекта. Методы как функции, которые живут внутри объекта. Методы вызываются с помощью точечной нотации: <объект>. <имя метода>(<парам 1>, <парам 2>, …) Python Programming, 2/e 27

Использование графических объектов n p. get. X() и p. get. Y() возвращает координаты x Использование графических объектов n p. get. X() и p. get. Y() возвращает координаты x и y точки. Функции такие как эти называются функциями доступа, потому что они позволяют нам получить данные от переменной экземпляра класса. Python Programming, 2/e 28

Использование графических объектов n n n Другие методы изменяют состояние объекта, изменяя значения переменных Использование графических объектов n n n Другие методы изменяют состояние объекта, изменяя значения переменных объекта. Метод move(dx, dy) двигает объект на dx единиц в направлении x и на dy единиц в направлении y. Метод move стирает старый образ и прорисовывает его в новом положении. Методы, изменяющие состояние, называются модификаторами. Python Programming, 2/e 29

Использование графических объектов >>> circ = Circle(Point(100, 100), 30) >>> win = Graph. Win() Использование графических объектов >>> circ = Circle(Point(100, 100), 30) >>> win = Graph. Win() >>> circ. draw(win) n n n Первая строка создаёт круг радиуса 30 с центром в (100, 100). Мы использовали конструктор класса Point, чтобы задать центр круга. Последняя строка кода это запрос к объекту Circle с именем circ нарисовать себя в окне объекта win класса Graph. Win. Python Programming, 2/e 30

Использование графических объектов n Метод draw использует данные о центре и радиусе круга из Использование графических объектов n Метод draw использует данные о центре и радиусе круга из переменной экземпляра. Python Programming, 2/e 31

Использование графических объектов n Две разные переменные могут ссылаться на один объект. Изменения, сделанные Использование графических объектов n Две разные переменные могут ссылаться на один объект. Изменения, сделанные с помощью одной переменной, будут видны и на другой. >>> >>> >>> n left. Eye = Circle(Point(80, 50), 5) left. Eye. set. Fill('yellow') left. Eye. set. Outline('red') right. Eye = left. Eye right. Eye. move(20, 0) Идея заключается в том, чтобы создать левый глаз, скопировать его как правый глаз и сдвинуть правый глаз на 20 единиц. Python Programming, 2/e 32

Использование графических объектов n n Присваивание right. Eye = left. Eye заставляет right. Eye Использование графических объектов n n Присваивание right. Eye = left. Eye заставляет right. Eye и left. Eye ссылаться на один и тот же круг! Ситуация, когда две переменные ссылаются на один объект называется совмещением (aliasing). Python Programming, 2/e 33

Использование графических объектов Python Programming, 2/e 34 Использование графических объектов Python Programming, 2/e 34

Использование графических объектов n n Существует два способа исправить положение. Можно сделать два различных Использование графических объектов n n Существует два способа исправить положение. Можно сделать два различных круга по одному для каждого глаза: >>> >>> >>> left. Eye = Circle(Point(80, 50), 5) left. Eye. set. Fill('yellow') left. Eye. set. Outline('red') right. Eye = Circle(Point(100, 50), 5) right. Eye. set. Fill('yellow') right. Eye. set. Outline('red') Python Programming, 2/e 35

Использование графических объектов В графической библиотеке есть лучшее решение. У графических объектов есть метод Использование графических объектов В графической библиотеке есть лучшее решение. У графических объектов есть метод clone, который делает копии объектов. >>> >>> # Правильный способ создать два круга, # используя метод clone left. Eye = Circle(Point(80, 50), 5) left. Eye. set. Fill('yellow') left. Eye. set. Outline('red') right. Eye = left. Eye. clone() # right. Eye есть точная копия left. Eye right. Eye. move(20, 0) Python Programming, 2/e 36

Графическое изображение программы Графическое изображение программы "Будущее значение". Выбор координат Python Programming, 2/e 37

Графическое изображение программы Графическое изображение программы "Будущее значение". Выбор координат Python Programming, 2/e 38

Интерактивная графика n n В среде с графическим интерфейсом пользователь обычно взаимодействует со своими Интерактивная графика n n В среде с графическим интерфейсом пользователь обычно взаимодействует со своими приложениями щелкая по кнопкам, выбирая пункты меню, впечатывая данные в текстовые поля на экране монитора. Управляемое событиями программирование рисует элементы интерфейса виджеты (window gadgets) на экране и затем ожидает действий пользователя. Python Programming, 2/e 39

Интерактивная графика n n n Событие сгенерировано как только пользователь двигает мышь, щелкает мышью, Интерактивная графика n n n Событие сгенерировано как только пользователь двигает мышь, щелкает мышью, или печатает на клавиатуре. Событие это объект, который инкапсулирует данные о том, что только что случилось. Событийный объект посылается в соответствующую часть программы для обработки, например, кнопочное событие. Python Programming, 2/e 40

Интерактивная графика Графический модуль скрывает лежащее в основе, низкоуровневое управление окнами и предоставляет два Интерактивная графика Графический модуль скрывает лежащее в основе, низкоуровневое управление окнами и предоставляет два простых способа получить ввод пользователя в окно Graph. Win. Python Programming, 2/e 41

Получение щелчков мыши n n n Мы можем получить графические данные от пользователя с Получение щелчков мыши n n n Мы можем получить графические данные от пользователя с помощью метода get. Mouse класса Graph. Win. Если вызывается метод get. Mouse объекта класса Graph. Win, то программа делает паузу и ждёт щелчка пользователя гденибудь в окне. Точка щелчка пользователя возвращается как объект класса Point. Python Programming, 2/e 42

Получение щелчков мыши n Следующий код сообщает координаты щелчка мыши: from graphics import * Получение щелчков мыши n Следующий код сообщает координаты щелчка мыши: from graphics import * win = Graph. Win( «Щелкни по мне!") p = win. get. Mouse() print("You clicked", p. get. X(), p. get. Y()) n Мы можем воспользоваться функциями доступа, такими как get. X и get. Y или другими методами применимыми к возвращенной точке. Python Programming, 2/e 43

Получение щелчков мыши # triangle. pyw # Интерактивная программа с графическим интерфейсом для # Получение щелчков мыши # triangle. pyw # Интерактивная программа с графическим интерфейсом для # рисования треугольника from graphics import * def main(): win = Graph. Win("Рисуем треугольник") win. set. Coords(0. 0, 10. 0) message = Text(Point(5, 0. 5), "Щелкни по трём точкам") message. draw(win) # Получи и нарисуй три вершины треугольника p 1 = win. get. Mouse() p 1. draw(win) p 2 = win. get. Mouse() p 2. draw(win) p 3 = win. get. Mouse() p 3. draw(win) Python Programming, 2/e 44

Получение щелчков мыши # Используем объект Polygon для рисования треугольника triangle = Polygon(p 1, Получение щелчков мыши # Используем объект Polygon для рисования треугольника triangle = Polygon(p 1, p 2, p 3) triangle. set. Fill("peachpuff") triangle. set. Outline("cyan") triangle. draw(win) # Ждем еще щелчок, чтобы выйти message. set. Text("Щелкните где-либо для выхода. ") win. get. Mouse() main() Python Programming, 2/e 45

Получение щелчков мыши Python Programming, 2/e 46 Получение щелчков мыши Python Programming, 2/e 46

Получение щелчков мыши n Замечания: n n Если вы программируете в оконной среде, использование Получение щелчков мыши n Замечания: n n Если вы программируете в оконной среде, использование расширения. pyw в ваших файлах будет причиной того, что оболочка Python’а ничего не будет показывать, когда вы щелкаете по пиктограмме программы. У нас нет класса треугольников. Мы используем общий класс многоугольников, объекты которого принимают любое количество точек и соединяют их, получая замкнутую фигуру. Python Programming, 2/e 47

Получение щелчков мыши n Если у вас есть три точки, то создать треугольник просто Получение щелчков мыши n Если у вас есть три точки, то создать треугольник просто : triangle = Polygon(p 1, p 2, p 3) n Одиночный текстовый объект создаётся в начале программы. message = Text(Point(5, 0. 5), "Щелкните по трём точкам") message. draw(win) n Чтобы изменить подсказку, просто измените текст, который выведен. message. set. Text("Щелкните где-нибудь, чтобы выйти. ") Python Programming, 2/e 48

Обработка ввода текста n n Ввод в программе, рисующей треугольник, осуществляется исключительно с помощью Обработка ввода текста n n Ввод в программе, рисующей треугольник, осуществляется исключительно с помощью щелчков мыши. Имеется также объект Entry, который может получать ввод с клавиатуры. Объект Entry рисует текстовое поле на экране. Объект понимает методы set. Text и get. Text, с одним дополнением: ввод можно редактировать. Python Programming, 2/e 49

Обработка ввода текста Python Programming, 2/e 50 Обработка ввода текста Python Programming, 2/e 50

Обработка ввода текста # convert_gui. pyw # Программа преобразования температуры по Цельсию в температуру Обработка ввода текста # convert_gui. pyw # Программа преобразования температуры по Цельсию в температуру по Фаренгейту # с использованием простого графического интерфейса from graphics import * def main(): win = Graph. Win("Преобразователь температуры ", 300, 200) win. set. Coords(0. 0, 3. 0, 4. 0) # Рисуем интерфейс Text(Point(1, 3), " Температура по Цельсию: "). draw(win) Text(Point(1, 1), " Температура по Фаренгейту : "). draw(win) input = Entry(Point(2, 3), 5) input. set. Text("0. 0") input. draw(win) output = Text(Point(2, 1), "") output. draw(win) button = Text(Point(1. 5, 2. 0), " Преобразуй") button. draw(win) Rectangle(Point(1, 1. 5), Point(2, 2. 5)). draw(win) Python Programming, 2/e 51

Обработка ввода текста # Ждём щелчок мыши win. get. Mouse() # Преобразуем ввод celsius Обработка ввода текста # Ждём щелчок мыши win. get. Mouse() # Преобразуем ввод celsius = eval(input. get. Text()) fahrenheit = 9. 0/5. 0 * celsius + 32 # выводим на экран результат и меняем название кнопки output. set. Text(fahrenheit) button. set. Text("Выйти") # ждём щелчок и выходим win. get. Mouse() win. close() main() Python Programming, 2/e 52

Обработка ввода текста Python Programming, 2/e 53 Обработка ввода текста Python Programming, 2/e 53

Обработка ввода текста n В процессе работы программа создаёт окно с текстовым полем для Обработка ввода текста n В процессе работы программа создаёт окно с текстовым полем для ввода температуры по Цельсию и кнопку «Преобразуй» . n Кнопка бутафорская. В действительности мы ждём щелчок где угодно во всём окне. Python Programming, 2/e 54

Обработка ввода текста n n n Первоначально текстовое поле ввода содержит “ 0. 0”. Обработка ввода текста n n n Первоначально текстовое поле ввода содержит “ 0. 0”. Пользователь может стереть это значение и напечатать другое. Программа ждёт щелчка мыши – нам всё равно где, поэтому мы не запоминаем точку щелчка. Python Programming, 2/e 55

Обработка ввода текста n Ввод обрабатывается за три шага : n Введённое текстовое значение Обработка ввода текста n Ввод обрабатывается за три шага : n Введённое текстовое значение преобразуется в число функцией eval. n n Это число затем преобразуется а градусы Фаренгейта. Это число затем преобразуется в текст и форматируется для вывода в текстовое поле функции output. Python Programming, 2/e 56