Захват координат x, y с помощью Python PIL
Я хочу отобразить изображение для пользователя с PIL, и когда пользователь нажимает в любом месте на этом изображении,я хочу, чтобы вызывался def onmousedown(x, y). Я сделаю некоторые дополнительные вещи в этой функции. Как я могу сделать это в PIL?
спасибо,
2 ответов
PIL не будет делать это в одиночку - PIL-это библиотека обработки изображений без пользовательских интерфейсов-у нее есть show
метод, который открывает внешнюю программу, которая отображает изображение,но не связывается с процессом Python.
поэтому, чтобы пользователь мог взаимодействовать с изображением, нужно создать программу GUI, используя один из консолидированных наборов инструментов для использования С Python - более известными являются Tkinter, GTK и Qt4. Tkinter-это интересно, потому что он поставляется с предустановленными установками Windows Python и поэтому более легко доступен для пользователей этой системы. Пользователям Windows придется отдельно загружать и устанавливать библиотеки gtk или qt, чтобы иметь возможность использовать вашу программу, если вы решите использовать другие наборы инструментов.
вот минималистский пример приложения Tkinter с кликабельным изображением:
import Tkinter
from PIL import Image, ImageTk
from sys import argv
window = Tkinter.Tk(className="bla")
image = Image.open(argv[1] if len(argv) >=2 else "bla2.png")
canvas = Tkinter.Canvas(window, width=image.size[0], height=image.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(image)
canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
def callback(event):
print "clicked at: ", event.x, event.y
canvas.bind("<Button-1>", callback)
Tkinter.mainloop()
еще одно сообщение
как отобразить изображение и получить координату щелчка мыши на нем
на Ubuntu для установки
судо apt-получить установку языка Python-ТК простоя питон-питон ППР-визуализации для Python-визуализации-ООО "ТК"
тогда все работает.
Я добавил изменение размера в решение @jsbueno и исправил одну проблему импорта.
import Tkinter
from PIL import ImageDraw, Image, ImageTk
import sys
window = Tkinter.Tk(className="bla")
image = Image.open(sys.argv[1] if len(sys.argv) >=2 else "bla2.png")
image = image.resize((1000, 800), Image.ANTIALIAS)
canvas = Tkinter.Canvas(window, width=image.size[0], height=image.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(image)
canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
def callback(event):
print "clicked at: ", event.x, event.y
canvas.bind("<Button-1>", callback)
Tkinter.mainloop()