用Python-PIL捕捉x,y坐标
我想用PIL向用户显示一个图像,当用户单击该图像上的任何位置时,我想调用def onmousedown(x,y)。我将在这个函数中做一些额外的工作。我怎样才能在PIL中做到这一点 谢谢,PIL不会单独完成这项工作——PIL是一个没有用户界面的图像处理库——它有一个用Python-PIL捕捉x,y坐标,python,python-imaging-library,Python,Python Imaging Library,我想用PIL向用户显示一个图像,当用户单击该图像上的任何位置时,我想调用def onmousedown(x,y)。我将在这个函数中做一些额外的工作。我怎样才能在PIL中做到这一点 谢谢,PIL不会单独完成这项工作——PIL是一个没有用户界面的图像处理库——它有一个show方法,它确实打开了一个显示图像的外部程序,但不会与Python进程通信 因此,为了能够让用户与图像交互,必须使用一个用于Python的整合工具包来构建GUI程序——更知名的是Tkinter、GTK和Qt4。Tkinter很有趣,
show
方法,它确实打开了一个显示图像的外部程序,但不会与Python进程通信
因此,为了能够让用户与图像交互,必须使用一个用于Python的整合工具包来构建GUI程序——更知名的是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()
导入Tkinter
从PIL导入图像,ImageTk
从系统导入argv
window=Tkinter.Tk(className=“bla”)
image=image.open(如果len(argv)>=2,则argv[1]否则为“bla2.png”)
canvas=Tkinter.canvas(窗口,宽度=image.size[0],高度=image.size[1])
canvas.pack()
image_tk=ImageTk.PhotoImage(图像)
canvas.create_image(image.size[0]//2,image.size[1]//2,image=image_-tk)
def回调(事件):
打印“点击:”,事件x,事件y
canvas.bind(“,回调)
Tkinter.mainloop()
这里是另一篇相关文章
在Ubuntu上安装
sudo apt get install python tk idle python pmw python imaging python imaging tk
然后一切都开始了
我在@jsbueno的解决方案中添加了一个resize,并修复了一个导入问题
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()
导入Tkinter
从PIL导入ImageDraw、Image、ImageTk
导入系统
window=Tkinter.Tk(className=“bla”)
image=image.open(如果len(sys.argv)>=2,则为sys.argv[1],否则为“bla2.png”)
image=image.resize((1000800),image.ANTIALIAS)
canvas=Tkinter.canvas(窗口,宽度=image.size[0],高度=image.size[1])
canvas.pack()
image_tk=ImageTk.PhotoImage(图像)
canvas.create_image(image.size[0]//2,image.size[1]//2,image=image_-tk)
def回调(事件):
打印“点击:”,事件x,事件y
canvas.bind(“,回调)
Tkinter.mainloop()
PIL只是一个图像库,您可以使用它创建图像。显示图像和捕获点击事件是用户界面引擎的工作。你有/想要什么样的用户界面?