Quick Disclaimer: у меня нет большого опыта работы с PIL, поэтому я не знаю, как удалить уже нарисованный текст.Может быть, вы можете понять это самостоятельно.Но кроме этого, я знаю кое-что о tkinter.Моя идея заключается в следующем:
Привязать функцию к событию <B1-motion>
(кнопка 1 удерживается и перемещается), которая будет постоянно определять положение мыши внутри окна и рисовать новый текст при этом.положение, удаляя предыдущий текст.
import...
...
def func_image():
img_window = tk.Toplevel()
...
...
draw = ImageDraw.Draw(photo)
draw.text((50,50),text=text.get(),fill='red',font=fonty)
...
def move_text(event):
# here you would delete your previous text
x = event.x
y = event.y
draw.text((x,y),text=text.get(),fill='red',font=fonty
img_window.bind('<B1-Motion>', move_text)
При этом я думаю, что было бы лучше использовать Canvas.create_text
(подробнее о effbot.org ), чтобы написать свой текст на изображении.Очень просто перетащить текст на Canvas
, вот небольшой пример:
import tkinter as tk
root = tk.Tk()
def change_position(event):
x = event.x
y = event.y
# 20x20 square around mouse to make sure text only gets targeted if the mouse is near it
if text in c.find_overlapping(str(x-10), str(y-10), str(x+10), str(y+10)):
c.coords(text, x, y) # move text to mouse position
c = tk.Canvas(root)
c.pack(anchor='n')
text = c.create_text('10', '10', text='test', fill='red', font=('arial', 18)) # you can define all kinds of text options here
c.bind("<B1-Motion>", change_position)
root.mainloop()