捕获x,y与Python PIL协调

BBD*_*Sys 7 python python-imaging-library

我想用PIL向用户显示图像,当用户点击此图像的任何位置时,我想要调用def onmousedown(x,y).我会在这个函数中做一些额外的事情.我怎么能在PIL中这样做?

谢谢,

jsb*_*eno 9

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()
Run Code Online (Sandbox Code Playgroud)