使用Python PIL捕获x,y坐标
我想用PIL库给用户显示一张图片,当用户在这张图片上点击任何地方时,我希望能调用一个名为def onmousedown(x,y)的函数。在这个函数里我会做一些额外的事情。我该怎么在PIL中实现这个呢?
谢谢,
2 个回答
2
这里有另一个相关的帖子
在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()
10
PIL(Python Imaging Library)本身无法单独完成所有工作——它是一个用于处理图像的库,但没有用户界面。虽然它有一个show
方法,可以打开一个外部程序来显示图像,但这个程序和Python之间并没有互动。
因此,如果想让用户与图像进行互动,就需要使用Python的一些常用工具包来构建一个图形用户界面(GUI)程序。比较知名的工具包有Tkinter、GTK和Qt4。Tkinter比较特别,因为它在Windows的Python安装中是预装的,所以Windows用户使用起来更方便。如果你选择使用其他工具包,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()