Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Векторная графика в tkinter, объект Canvas
Графика в tkinter замечательна тем, что всё, что вы будете изображать являются объектами. Создав такой объект в окне, который отобразится, вы можете им потом программно управлять (двигать, делать невидимым. менять другие параметры). В сущности tkinter даёт вам прямо в руки готовый инструмент для создания векторного графического редактора. Для отображения графики в окне создаётся холст (Canvas), который может занимать какую-то часть окна или охватывать всё его пространство. Все последующие объекты создаются на этом холсте.
Ниже в программе (рисунок 1) представлены все графические примитивы tkinter, кроме текста (о тексте и других возможностях в следующей статье в следующем). В левом верхнем углу изображена картинка, которая считывается с диска. По щелчку мыши картинка исчезает, по второму опять появляется (рисунки 2, 3).
Пояснения к программе
- Первое, что нужно отметить, это создание объекта холст tkinter.Canvas. Размеры холста мы подгоняем под размер экрана (не окна). Размеры (width, height) мы получаем с помощью методов Tk.winfo_screenwidth() и Tk.winfo_screenheight().
- Будем обрабатывать щелчок мыши по Canvas: self.cnv.bind("<Button-1>", self.cli). Ниже я прокомментирую эту обработку.
- Особо остановимся на изображениях. С помощью tkinter.PhotoImage() можно считать картинку и создать соответствующий объект. У объекта (картинки) можно менять размеры. В частности в программе размер картинки уменьшается в три раза: .subsample(3, 3). Можно размер увеличить: .zoom(n, m). Далее на холсте создаётся визуальный объект с помощью Canvas.create_image(). Указываются координаты, относительно которых будет определяться положение картинки на холсте. Относительно положение указывается уже знакомым нами способом: anchor='nw'. Хочу отметить, что self.im это объект-изображение, которым можно теперь управлять.
- Далее рисуются векторные фигуры: линия (.create_line()), прямоугольник (.create_rectangle()), многоугольник (.create_polygon()), овал (.create_oval()), сектор (.create_arc()).
- Отметим общие для всех параметры: fill - цвет заполнения, для линии это цвет линии, outline - цвет границы, width - ширина границы.
- Остановимся на объекте линия. Для неё в частности можно указать стрелочки на конце. Размеры стрелочек определяются кортежем (8, 8, 8) - это размеры треугольника, две боковые стороны и основание.
- Прямоугольник определяется координатами левого верхнего и правого нижнего углов.
- Многоугольник задаётся набором координат, которые автоматически соединяются линиями.
- Овал определяется координатами описанного вокруг него прямоугольника.
- Сектор определяется координатами описанного вокруг овала прямоугольника, а также start - начальным углом, extent - величиной угла.
- Наконец рассмотрим self.cli(). При щелчке мышью по Canvas то исчезает, то появляется картинка. Достигается это использованием метода Canvas.itemconfigure(), в котором указывается объект и новые параметры этого объекта.
Пока всё! Продолжение следует...
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.