мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
python:week15 [26/04/2017 05:46] – [Работа с цветами] ybezrukov | python:week15 [16/03/2018 11:37] – [Сегмент] ybezrukov | ||
---|---|---|---|
Строка 3: | Строка 3: | ||
На предыдущих занятиях мы разобрали библиотеку, | На предыдущих занятиях мы разобрали библиотеку, | ||
- | Начнем с простого примера | + | Начнем с простого примера. Если он вдруг не заработает сразу, то выполните у себя в терминале |
+ | |||
+ | < | ||
+ | pip3 install --user graphics.py | ||
+ | </ | ||
<code python> | <code python> | ||
from graphics import * | from graphics import * | ||
+ | import time | ||
- | def gr(): # наша рисующая функция | + | |
+ | # наша рисующая функция | ||
+ | def gr(): | ||
winWidth = 800 | winWidth = 800 | ||
winHeight = 600 | winHeight = 600 | ||
- | | + | # Создадим окно с заголовком " |
- | | + | |
- | | + | # В координаты 50, 50 поместим окружность радиусом 10 |
- | c.draw(win) # нарисуем шарик в окне win | + | c = Circle(Point(50, 50), 10) |
- | e.draw(win) # нарисуем текст в окне win | + | |
- | + | ||
- | while (True) : # запустим цикл, который будет ждать нажатия мышью | + | |
- | clickPoint = win.getMouse() # подождем, пока кто-нибудь не кликнет мышкой в окне | + | |
- | print(clickPoint) # напечатаем на экран координаты точки клика | + | |
- | | + | |
- | break # и если кликнули в левой части экрана, | + | |
- | | + | # В координаты 50, 50 напишем текст |
- | + | e = Text(Point(200, | |
- | gr() # запустим функцию | + | " |
+ | | ||
+ | | ||
+ | | ||
+ | e.draw(win) | ||
- | </ | + | # запустим цикл, который будет ждать нажатия мышью |
+ | while (True): | ||
+ | # подождем, | ||
+ | clickPoint = win.getMouse() | ||
+ | # напечатаем на экран координаты точки клика | ||
+ | print(clickPoint) | ||
+ | |||
+ | # если лопнули шарик | ||
+ | if c.getP1().getX() < clickPoint.getX() < c.getP2().getX() and c.getP1().getY() < clickPoint.getY() < c.getP2().getY(): | ||
+ | # то удалим шарик с экрана | ||
+ | c.undraw() | ||
+ | # изменим текст | ||
+ | e.setText(" | ||
+ | # подождем 2 секунды | ||
+ | time.sleep(2) | ||
+ | # и прервем выполнение цикла | ||
+ | break | ||
+ | # и закроем графическое окно | ||
+ | win.close() | ||
+ | |||
+ | # запустим функцию | ||
+ | gr() | ||
+ | |||
+ | |||
+ | </ | ||
====== Функции GraphWin ====== | ====== Функции GraphWin ====== | ||
Строка 43: | Строка 71: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
+ | * '' | ||
====== Графические элементы ====== | ====== Графические элементы ====== | ||
Строка 86: | Строка 115: | ||
* '' | * '' | ||
+ | |||
+ | ===== Сегмент ===== | ||
+ | |||
+ | К сожалению, | ||
+ | |||
+ | Добавим в начало программы следующий код: | ||
+ | |||
+ | <code python> | ||
+ | class Arc(Oval): | ||
+ | | ||
+ | def __init__(self, | ||
+ | self.extent = extent | ||
+ | self.start = start | ||
+ | super().__init__(p1, | ||
+ | |||
+ | def __repr__(self): | ||
+ | return " | ||
+ | |||
+ | def clone(self): | ||
+ | other = Arc(self.p1, | ||
+ | other.config = self.config.copy() | ||
+ | return other | ||
+ | |||
+ | def _draw(self, canvas, options): | ||
+ | p1 = self.p1 | ||
+ | p2 = self.p2 | ||
+ | x1, y1 = canvas.toScreen(p1.x, | ||
+ | x2, y2 = canvas.toScreen(p2.x, | ||
+ | options[' | ||
+ | options[' | ||
+ | options[' | ||
+ | return canvas.create_arc(x1, | ||
+ | </ | ||
+ | |||
+ | Теперь в нашей программе появилась возможность рисовать сегменты окружности, | ||
+ | |||
+ | <code python> | ||
+ | arc = Arc(Point(50, | ||
+ | arc.setFill(" | ||
+ | arc.draw(win) | ||
+ | </ | ||
===== Многоугольник ===== | ===== Многоугольник ===== | ||
* '' | * '' | ||
Строка 99: | Строка 169: | ||
* '' | * '' | ||
* '' | * '' | ||
- | ==== Работа с цветами ==== | + | |
+ | ===== Обновление экрана ===== | ||
+ | |||
+ | По умолчанию, | ||
+ | |||
+ | Для этого: | ||
+ | 1. При инициализации графического окна нужно добавить параметр '' | ||
+ | 2. В цикле отрисовки нужно добавить явный вызов функции обновления окна, указав в качестве аргумента частоту кадров, | ||
+ | |||
+ | <code python> | ||
+ | win = GraphWin(" | ||
+ | for i in range(1000): | ||
+ | # <Все что рисуется на экране> | ||
+ | update(30) | ||
+ | </ | ||
+ | |||
+ | ===== Работа с цветами | ||
В этой библиотеке цвет можно описать двумя способами: | В этой библиотеке цвет можно описать двумя способами: | ||
Строка 106: | Строка 192: | ||
Во втором случае, | Во втором случае, | ||
+ | |||
+ | |||
+ | ===== Задачи ===== | ||
==== Задание 18 ==== | ==== Задание 18 ==== | ||
- | Воспроизвести на Питоне программу с вращающейся пирамидкой из прошлого семестра | + | Написать |
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 19 ==== | ||
+ | |||
+ | Модифицировать предыдущую | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 20 ==== | ||
+ | |||
+ | Модифицировать прогрмму из задания 18 так, чтобы: | ||
+ | |||
+ | - Вместо точек рисовались окружности | ||
+ | - Когда рисуется следующая окружность, | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 21 (планеты со спутниками) ==== | ||
+ | |||
+ | Добавить еще одну точку для вращения, | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 22 ==== | ||
+ | |||
+ | Написать | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 23 ==== | ||
+ | |||
+ | Модифицировать программу так, чтобы точки были | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Задание 24 ==== | ||
+ | |||
+ | Модифицировать предыдущую программу так, чтобы вышла иллюзия вращающейся пирамидки | ||
+ | |||
+ | https:// |