2011-12-21 31 views
6

Quiero mostrar una imagen al usuario con PIL y cuando el usuario hace clic en alguna parte de esta imagen, quiero llamar a un def onmousedown (x, y). Haré algunas cosas extra en esta función. ¿Cómo puedo hacer esto en PIL?Captura de x, y Coordenadas con Python PIL

Gracias,

+4

PIL es solo una biblioteca de imágenes, puede crear imágenes con ella. Mostrar imagen y capturar evento de clic es un trabajo de motor de interfaz de usuario. ¿Qué rey de interfaz de usuario tienes/quieres? – Ski

Respuesta

8

PIL no lo hará solo - PIL es una biblioteca de manipulación de imágenes con no Interfaces de usuario - que tiene un método show, que hace abrir un programa externo que muestra la imagen, pero lo hace no comunicarse de vuelta con el proceso de Python.

Por lo tanto, para poder hacer que un usuario interactúe con una imagen, uno tiene que crear un programa GUI usando uno de los kits de herramientas consolidados para usar con Python; los más conocidos son Tkinter, GTK y Qt4 . Tkinter es interesante porque viene preinstalado con las instalaciones de Windows Python y, por lo tanto, está más fácilmente disponible para los usuarios de ese sistema. Los usuarios de Windows tendrían que descargar e instalar por separado las bibliotecas gtk o qt para poder usar su programa si decide usar uno de los otros kits de herramientas.

Aquí está un ejemplo de una aplicación minimalista Tkinter con una imagen seleccionable:

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

Aquí hay otro post relacionado

How to display picture and get mouse click coordinate on it

En Ubuntu para instalar

sudo apt obtener instalar python python-tk inactiva python-pmw python-imaging python-image-tk

Entonces todo funciona.

Agregué un cambio de tamaño a la solución de @ jsbueno y corrigí un problema de importación.

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() 
Cuestiones relacionadas