Вы можете попробовать http://www.texotela.co.uk/code/jquery/numeric/
В этой теме упоминается тот же плагин вместе с кучей других вещей, которые вы могли бы попробовать.
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()