2011-12-21 10 views
6

画像をPILでユーザに表示したいときに、ユーザがこの画像のどこかをクリックすると、def onmousedown(x、y)を呼び出すようにします。私はこの機能でいくつか余分なものをやります。 PILでこれをどうすればいいですか?Pythonでx、y座標を取り込むPIL

おかげで、

+4

PILは単なるイメージングライブラリで、イメージを使ってイメージを作成できます。画像を表示し、クリックイベントをキャプチャすることは、ユーザインタフェースエンジンの仕事である。あなたはどのようなユーザーインターフェースを持っていますか? – Ski

答えて

8

PILは一人でそれを行うことはありません - PILはありませんユーザーインターフェイスを持つ画像操作ライブラリである - それは、画像を表示する外部プログラムを開いていshow方法を、持っていませんが、ありませんPythonプロセスと通信しないでください。

したがって、ユーザーが画像を操作できるようにするには、Pythonで使用するための統合ツールキットの1つを使用してGUIプログラムを構築する必要があります.Tkinter、GTK、Qt4 。 TkinterはWindows Pythonのインストールにあらかじめインストールされているので興味深いので、そのシステムのユーザーが簡単に利用できます。 Windowsユーザーは、他のツールキットを使用する場合は、プログラムを使用できるようにgtkまたはqtライブラリを個別にダウンロードしてインストールする必要があります。ここ

は、クリック可能な画像とTkinterのアプリケーションのミニマリストの例である:Ubuntuでここ

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() 
2

は別の関連のポストである

How to display picture and get mouse click coordinate on it

須藤APT-をインストールしますget install python python-tkアイドル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() 
関連する問題