Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python-PIL捕捉x,y坐标_Python_Python Imaging Library - Fatal编程技术网

用Python-PIL捕捉x,y坐标

用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很有趣,

我想用PIL向用户显示一个图像,当用户单击该图像上的任何位置时,我想调用def onmousedown(x,y)。我将在这个函数中做一些额外的工作。我怎样才能在PIL中做到这一点

谢谢,

PIL不会单独完成这项工作——PIL是一个没有用户界面的图像处理库——它有一个
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只是一个图像库,您可以使用它创建图像。显示图像和捕获点击事件是用户界面引擎的工作。你有/想要什么样的用户界面?