2011-12-21 5 views
6

Я хочу отобразить изображение для пользователя с помощью PIL, и когда пользователь нажимает на него в любом месте этого изображения, я хочу, чтобы вызывается def onmousedown (x, y). Я буду делать некоторые дополнительные функции в этой функции. Как я могу это сделать в PIL?Захват x, y Координаты с Python PIL

Спасибо,

+4

PIL - это только библиотека изображений, вы можете создавать изображения с ней. Отображение изображения и захват события клика - это работа механизма пользовательского интерфейса. Какой король пользовательского интерфейса у вас есть/хотите? – Ski

ответ

8

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() 
2

Вот другая связанная почта

How to display picture and get mouse click coordinate on it

В Ubuntu для установки

Sudo apt- get install python python-tk idle python-pmw python-imaging python-imaging-tk

Тогда все работает.

Я добавил изменение размера к решению @ 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() 
Смежные вопросы