使用Python PIL捕获x,y坐标

8 投票
2 回答
14667 浏览
提问于 2025-04-17 08:46

我想用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()

撰写回答