Как рисовать на холсте Tkinter, PIL

Я хотел бы иметь возможность рисовать на изображении, отображаемом на холсте tkinter PIL. Я попробовал поиск в Google, но все результаты были бы такими, как рисовать изображение без tkinter или как отображать изображение, которое мне не нужно. Я также хотел бы, чтобы это было похоже на живое (цвет, пока я двигаю мышью). Есть какой-либо способ сделать это. Если нет способов с PIL, есть ли способ с tkinter.

Вы можете использовать модуль Pillow ImageDraw.

acw1668 14.05.2022 19:37

Да, я изучил это, но я не знаю, как использовать это с tkinter.

Dodu 15.05.2022 05:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что лучшим подходом было бы рисовать с помощью tkinter, потому что в противном случае вам нужно будет постоянно обновлять виджет холста каждый раз, когда изображение изменяется с помощью PIL (что может быть слишком медленным и мешать «живому» рисованию).

tkinterCanvas имеют несколько различных возможностей рисования векторов и текста, и вы можете рисовать/отображать их наверху изображения, которое также отображается им. Это означает, что если вы сначала добавите изображение, все, что будет нарисовано дальше, появится поверх него (если оно перекрывает изображение).

Ниже приведена демонстрация того, как это сделать. Примечание. Я позаимствовал часть кода и образец изображения со страницы python-course.eu: Виджеты Canvas в Tkinter. В нем описываются средства рисования, предоставляемые Canvas виджетами.

from PIL import Image, ImageTk
import tkinter as tk
from tkinter.constants import *

canvas_width, canvas_height = 300, 300

root = tk.Tk()

canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()

img = ImageTk.PhotoImage(file='rocks.png')
canvas.create_image(20, 20, anchor=NW, image=img)

# Draw something on top of image.
points = [100, 140, 110, 110, 140, 100, 110, 90, 100, 60, 90, 90, 60, 100, 90, 110]
canvas.create_polygon(points, outline='green', fill='yellow', width=3)

root.mainloop()

Вот изображение rocks.png, которое использует код.

Скриншот результата:

screenshot

Другие вопросы по теме