Работа с отрезками на холсте Tkinter

Раздел: GUI -> Tkinter

Рисование линий в Tkinter

Как создать простую линию на холсте Tkinter?

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=300)
canvas.pack()

line = canvas.create_line(50, 50, 200, 150, fill='blue')
root.mainloop()

Python self tkinter (использование self в tkinter)

Метод create_line принимает координаты начальной и конечной точек: x1, y1, x2, y2. Дополнительно можно указать цвет через аргумент fill. Линия отобразится на холсте. Координаты задаются относительно левого верхнего угла холста.

Типичные ошибки:

  • Забыть импортировать tkinter или создать экземпляр Tk.
  • Перепутать порядок координат: сначала x, потом y для каждой точки.
  • Не вызвать mainloop() – окно не появится.

Как задать толщину линии в Tkinter?

canvas.create_line(10, 10, 200, 10, width=5, fill='red')

Tkinter python buttons (кнопки в tkinter (англ.))

Параметр width определяет ширину линии в пикселях. По умолчанию 1.

Как сделать пунктирную линию?

canvas.create_line(10, 30, 200, 30, dash=(4, 2), fill='green')

Python tkinter label (метка (label) в tkinter)

Параметр dash принимает кортеж длин отрезков и пробелов. Например, (4,2) – 4 пикселя черты, 2 пробела.

Если указать неверное значение (например, строку), возникнет ошибка TypeError.

Как изменить вид концов линии и места соединения?

canvas.create_line(10,50,100,50,150,100, width=8, capstyle='round', joinstyle='round')

Python tkinter entry (поле ввода (entry) в tkinter)

Параметр capstyle (butt, projecting, round) отвечает за форму концов. joinstyle (bevel, miter, round) – за соединение сегментов.

Как добавить стрелки на линии?

canvas.create_line(10,70,200,70, arrow='last', arrowshape=(8,10,5))

Python tkinter приложение (создание приложения на tkinter)

arrow может быть 'first', 'last', 'both'. arrowshape – кортеж (длина, ширина, острие).

Если arrowshape задать с отрицательными значениями, стрелка может отображаться некорректно.

Как нарисовать гладкую кривую линию через точки?

canvas.create_line(10,100, 50,50, 100,100, 150,50, smooth=True)

Python tkinter programs (примеры программ на tkinter)

Параметр smooth=True превращает ломаную в сглаженную кривую Безье. Для точного контроля используйте splinesteps.

Как сделать линию с текстурой или прозрачностью?

canvas.create_line(10,120,200,120, fill='gray', stipple='gray25')

Python tkinter line (рисование линий в tkinter)

stipple задает битовый шаблон для имитации полупрозрачности. Допустимые значения: 'gray12', 'gray25', 'gray50', 'gray75' и другие из предопределенных.

Как группировать линии и управлять ими?

canvas.create_line(10,140,200,140, tags=('line1', 'red'))

Python tkinter окно (создание окна в tkinter)

Теги позволяют изменять свойства сразу нескольких объектов. Например, canvas.itemconfig('line1', fill='blue').

Как нарисовать ломаную линию по списку точек?

points = [10,160, 50,180, 100,160, 150,200]
canvas.create_line(points, fill='purple')

Аргументом можно передать список или кортеж чисел, чередующих x и y.

Использование всех перечисленных параметров позволяет создавать линии любой сложности. Экспериментируйте с комбинациями.

- Import tkinter as tk python (импорт tkinter как tk в python)
- Python интерфейс tkinter (интерфейс tkinter в python)
- Python приложение для windows (создание окна с помощью tkinter)

Продвинутые техники рисования линий

Анимированная линия (удлинение)

Пример
import tkinter as tk

def animate():
    global x
    canvas.coords(line, 0, 150, x, 150)
    x += 2
    if x <= 400:
        root.after(20, animate)

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=300)
canvas.pack()
x = 0
line = canvas.create_line(0, 150, 0, 150, fill='red', width=3)
animate()
root.mainloop()
Линия удлиняется от левого края к правому со скоростью 2 пикселя за 20 мс.

Градиентная линия (множество отрезков)

Пример
import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=100)
canvas.pack()

colors = ['#ff0000', '#ff6600', '#ffff00', '#00ff00', '#0000ff']
segments = 20
x1 = 10
y = 50
for i in range(segments):
    x2 = x1 + (380 - 10) / segments
    canvas.create_line(x1, y, x2, y, fill=colors[i % len(colors)], width=5)
    x1 = x2
root.mainloop()
На холсте появляется линия, состоящая из 20 отрезков разных цветов, создающая эффект градиента.

Интерактивное рисование линий мышью

Пример
import tkinter as tk

def start_draw(event):
    global start_x, start_y
    start_x, start_y = event.x, event.y

def draw_line(event):
    canvas.create_line(start_x, start_y, event.x, event.y)

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=300)
canvas.pack()
canvas.bind('', start_draw)
canvas.bind('', draw_line)
root.mainloop()
При зажатии левой кнопки мыши и движении рисуется линия от точки нажатия до текущего положения курсора.

Линия по математической функции (синусоида)

Пример
import tkinter as tk
import math

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=200)
canvas.pack()

points = []
for x in range(0, 400, 5):
    y = 100 + 50 * math.sin(x / 30)
    points.extend([x, y])
canvas.create_line(points, smooth=True, fill='blue')
root.mainloop()
На холсте отображается сглаженная синусоидальная волна синего цвета.

Линии с разными стилями концов и соединений

Пример
import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=200)
canvas.pack()

# Три линии с разными capstyle
canvas.create_line(20, 20, 150, 20, width=10, capstyle='butt', fill='black')
canvas.create_line(20, 50, 150, 50, width=10, capstyle='projecting', fill='black')
canvas.create_line(20, 80, 150, 80, width=10, capstyle='round', fill='black')

# Ломаная с joinstyle
canvas.create_line(20, 120, 100, 120, 180, 170, width=10, joinstyle='miter', fill='red')
canvas.create_line(20, 160, 100, 160, 180, 210, width=10, joinstyle='round', fill='green')
root.mainloop()
Показаны три горизонтальные линии с разными capstyle и две ломаные с разными joinstyle.

Линия с тенью (дублирование со смещением)

Пример
import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=100)
canvas.pack()

# Тень
canvas.create_line(15, 55, 300, 55, width=5, fill='gray')
# Основная линия
canvas.create_line(10, 50, 295, 50, width=5, fill='blue')
root.mainloop()
Голубая линия с эффектом тени (серая линия сдвинута на 5 пикселей вправо и вниз).

Рисование линий в Tkinter - comments

En
Python tkinter line (python)