GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Python 3
  • Скачать Python
  • IDE
  • Скачать PyCharm
  • Django
  • Tkinter
  • Книги

This view

  • Original page
  • New address

GeezerVison is showing python-scripts.com — Рисуем круг, овал, прямоугольник, дугу и многугольник в Tkinter

Рисуем линии, прямоугольники, круг и текст в Tkinter

В этой части изучения Tkinter мы немного порисуем. Рисование в Tkinter реализовано при помощи виджета Canvas. Это функционал высокого уровня, который позволяет создавать графику в Tkinter. Рисование можно использовать для создания графиков статистики, самодельных пользовательских виджетов и даже небольших игр.

Содержание курса

  1. Создание окна по центру и кнопка выхода в Tkinter
  2. Разметка виджетов в Tkinter — pack, grid и place
  3. Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
  4. Меню, подменю и панель инструментов в Tkinter
  5. Диалоговые окна в Tkinter — Выбор цвета — Выбор файла
  6. Рисуем линии, прямоугольники, круг и текст в Tkinter
  7. Пишем игру змейка на Tkinter

Содержание статьи

  • Рисуем линии в Tkinter — create_line()
  • Создаем цветные прямоугольники в Tkinter
  • Рисуем различные формы в Tkinter
  • Вставляем изображение в Canvas
  • Меняем шрифт и рисуем текст в Tkinter

Рисуем линии в Tkinter — create_line()

Линия – это примитивный геометрический элемент. На виджете Canvas создать линию можно при помощи метода create_line().

lines.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from tkinter import Tk, Canvas, Frame, BOTH
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Рисуем линии")
        self.pack(fill=BOTH, expand=1)
 
        canvas = Canvas(self)
        canvas.create_line(15, 25, 200, 25)
        canvas.create_line(300, 35, 300, 200, dash=(4, 2))
        canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)
 
        canvas.pack(fill=BOTH, expand=1)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("400x250+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

В примере нашего кода, мы рисуем простые линии в Tkinter.

Python
1
canvas.create_line(15, 25, 200, 25)

Параметрами метода create_line() являются координаты x и y, которые обозначают стартовые и конечные точки линии.

Python
1
canvas.create_line(300, 35, 300, 200, dash=(4, 2))

Мы нарисовали вертикальную линию. Опция dash позволяет создать пунктированную линию. Множества (4, 3) означает:

  • 4 — длинна тире или точки в пикселях;
  • 2 — пустой промежуток между тире либо точками.

Если указать dash=(1, 1) то у нас будет линия из точек.


Python
1
canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)

Метод create_line() может содержать несколько конечных точек, которые будут пресекаться линией. Согласно этому коду мы нарисовали треугольник имея три координата разных точек.

Рисуем линии в Tkinter

Создаем цветные прямоугольники в Tkinter

Цвет является объектом, который отображает комбинацию Красного, Зеленого и Синего цветов (RGB).

colours.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from tkinter import Tk, Canvas, Frame, BOTH
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Цвета")
        self.pack(fill=BOTH, expand=1)
 
        canvas = Canvas(self)
        canvas.create_rectangle(
            30, 10, 120, 80,
            outline="#fb0", fill="#fb0"
        )
 
        canvas.create_rectangle(
            150, 10, 240, 80,
            outline="#f50", fill="#f50"
        )
 
        canvas.create_rectangle(
            270, 10, 370, 80,
            outline="#05f", fill="#05f"
        )
 
        canvas.pack(fill=BOTH, expand=1)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("400x100+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

В данном примере мы нарисовали прямоугольники и закрасили их разными цветами. Мы ранее работали с выбором цвета в Tkinter используя диалоговое окно цветовой палитры.

Python
1
canvas = Canvas(self)

Мы создали виджет canvas.

Python
1
2
3
4
canvas.create_rectangle(
    30, 10, 120, 80,
    outline="#fb0", fill="#fb0"
)

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Python Форум Помощи

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Чат
Канал

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Подписаться

С помощью create_rectangle() мы создаем прямоугольник на холсте. Первыми четырьмя параметрами являются x и y координаты двух ограничительных точек: верхней левой и нижней правой. При помощи параметра outline мы можем задать цвет контура прямоугольников. А параметр fill используется для окрашивания всей внутренней области прямоугольника.

Рисуем прямоугольники в Tkinter

Рисуем различные формы в Tkinter

На холсте мы можем нарисовать самые разнообразные формы. На представленном ниже примере показаны некоторые из них.

shapes.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from tkinter import Tk, Canvas, Frame, BOTH
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Рисуем формы")
        self.pack(fill=BOTH, expand=1)
 
        canvas = Canvas(self)
 
        # Овальная форма.
        canvas.create_oval(
            10, 10, 80, 80, outline="#f11",
            fill="#1f1", width=2
        )
 
        # Овальная форма.
        canvas.create_oval(
            110, 10, 210, 80, outline="#f11",
            fill="#1f1", width=2
        )
 
        # Рисуем прямоугольник.
        canvas.create_rectangle(
            230, 10, 290, 60,
            outline="#f11", fill="#1f1", width=2
        )
 
        # Рисуем дугу.
        canvas.create_arc(
            30, 200, 90, 100, start=0,
            extent=210, outline="#f11", fill="#1f1", width=2
        )
 
        points = [
            150, 100, 200, 120, 240, 180, 210,
            200, 150, 150, 100, 200
        ]
 
        # Рисуем многоугольник.
        canvas.create_polygon(points, outline='#f11',
            fill='#1f1', width=2)
 
        canvas.pack(fill=BOTH, expand=1)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("330x220+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

Мы нарисовали разные формы в окне:

  • круг;
  • овал;
  • прямоугольник;
  • дугу и многугольник.

Контур окрашен в красный цвет, фигуры были наполнены зеленым цветом. Ширина контура указана в 2 пикселя.

Python
1
2
3
4
canvas.create_oval(
    10, 10, 80, 80, outline="red",
    fill="green", width=2
)

Метод create_oval() используется для того, чтобы создать круг в Tkinter. Первые четыре параметра определяют ограничивающие координаты фигуры. Иными словами, это x и y координаты верхней левой и правой нижней точек квадрата, в который помещен круг.

Python
1
2
3
4
canvas.create_rectangle(
    230, 10, 290, 60,
    outline="#f11", fill="#1f1", width=2
)

Мы нарисовали прямоугольник в Tkinter. Координаты снова обозначают ограничительные точки с координатами x и y..

Python
1
2
3
4
canvas.create_arc(
    30, 200, 90, 100, start=0,
    extent=210, outline="#f11", fill="#1f1", width=2
)

С помощью этого кода мы создаем дугу. Дуга является частью круга. Мы указывает ограничительные координаты нашей дуги.

Успейте заказать просмотры на видео в YouTube ДокторСмм по наиболее дешевой цене с большими оптовыми скидками. Кроме того, с заказом Вы сможете получить также персональные условия на приобретение ресурса с возможностью выбора более подходящей для Вашей ситуации скорости поступления просмотров. Торопитесь, скидки действуют ограниченное время!

С помощью параметра start мы устанавливаем угол дуги. Параметр extent указывает на размер угла.

Python
1
2
3
4
5
6
7
8
9
points = [
    150, 100, 200, 120, 240, 180, 210,
    200, 150, 150, 100, 200
]
 
canvas.create_polygon(
    points, outline='red',
    fill='green', width=2
)

Данный код позволяет нам создать многоугольник. У этой фигуры присутствует большое количество углов. Чтобы создать многоугольник в Tkinter, нам нужно задать несколько координат, используя метод create_polygon().

Создание форм в Tkinter

Вставляем изображение в Canvas

В данном примере мы рассмотрим, как вставить изображение в canvas виджете.

В данном примере используется файл изображения tatras.jpg который нужно сохранить рядом с нами кодом:

  • tatras.jpg

draw_image.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from tkinter import Tk, Canvas, Frame, BOTH, NW
from PIL import Image, ImageTk
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Изображение в Canvas")
        self.pack(fill=BOTH, expand=1)
 
        self.img = Image.open("tatras.jpg")
        self.tatras = ImageTk.PhotoImage(self.img)
 
        canvas = Canvas(
            self, width=self.img.size[0]+20,
            height=self.img.size[1]+20
        )
 
        canvas.create_image(10, 10, anchor=NW, image=self.tatras)
        canvas.pack(fill=BOTH, expand=1)
 
 
def main():
    root = Tk()
    ex = Example()
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

В примере продемонстрировано как добавить изображение в Canvas.

Python
1
2
self.img = Image.open("tatras.jpg")
self.tatras = ImageTk.PhotoImage(self.img)

Из библиотеки Pillow мы используем модули Image и ImageTk.

Python
1
2
3
4
canvas = Canvas(
    self, width=self.img.size[0]+20,
    height=self.img.size[1]+20
)

Мы создаем виджет Canvas. Учитываем размеры изображения. Холст будет на 20 пикселей шире и на 20 пикселей выше, нежели наше изображение.

Python
1
canvas.create_image(10, 10, anchor=NW, image=self.tatras)

Мы используем метод create_image(), чтобы создать изображение на холсте. Чтобы показать изображение, оно закрепляется в северном и западном направлениях anchor=NW нашего окна. Параметр image позволяет отобразить изображение.

Canvas Image

Меняем шрифт и рисуем текст в Tkinter

В последнем примере мы рассмотрим рисование текста используя виджет Canvas в Tkinter.

draw_text.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from tkinter import Tk, Canvas, Frame, BOTH, W
 
 
class Example(Frame):
 
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.master.title("Текст и Шрифт в Tkinter")
        self.pack(fill=BOTH, expand=1)
 
        canvas = Canvas(self)
        canvas.create_text(
            20, 30, anchor=W, font="DejavuSansLight",
            text="Красное солнце сгорает дотла"
        )
 
        canvas.create_text(
            20, 60, anchor=W, font="Arial",
            text="На пылающий город падает тень"
        )
 
        canvas.create_text(
            20, 130, anchor=W, font="TimesNewRoman",
            text="Перемен!"
        )
 
        canvas.create_text(
            20, 160, anchor=W, font="ComicSans",
            text="Требуют наши сердца"
        )
 
        canvas.create_text(
            20, 190, anchor=W, font="FreeSerif",
            text="Перемен!"
        )
 
        canvas.create_text(
            20, 220, anchor=W, font="LatoThin",
            text="Требуют наши глаза"
        )
 
        canvas.pack(fill=BOTH, expand=1)
 
 
def main():
    root = Tk()
    ex = Example()
    root.geometry("420x250+300+300")
    root.mainloop()
 
 
if __name__ == '__main__':
    main()

Мы рисуем слова из песни в нашем окне.

Python
1
2
3
4
canvas.create_text(
    20, 30, anchor=W, font="DejavuSansLight",
    text="Красное солнце сгорает дотла"
)

Первые два параметра – это x и y координаты центральной точки текста. Если мы закрепим текстовый объект по направлению запада anchor=W, текст будет начинаться в этой части окна. Параметр font позволяет нам менять шрифт текста, а параметр text отображает написанный текст в окне.

Рисуем линии, прямоугольники, круг и текст в Tkinter [Урок №6]

Vasile Buldumac

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: [email protected]

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.