Tkinterで縮小表示したgifファイルの正確な座標をマウスで取得できません
python3でTkinterを用いて、gifファイルをCanvasで表示し、
マウスを合わせた場所の座標を得られるようなプログラムを作りたいと考えています
しかし、gifファイルが大きいため画面に収まらないので、
Tkinter.PhotoImageのsubsampleで縮小して表示しています。
そのため、マウスの座標値を取得して縮小した比率をかけて元の値に戻しても、
縮小した分座標値が飛び飛びになってしまいます。
できる限り正確な画像の座標を取得できるような、良い解決策はないでしょうか?
出来れば原寸大で表示してスクロールするようなのは避けたいと考えています・・
TkinterというかGUIのプログラミングすら始めたばかりなので初歩的なことでしたらすみません・・
該当のソースコード
以下のプログラムでは画像を5分の1倍にして表示しているので、座標値が飛び飛びに、5の倍数しか得られなくなってしまっています
python3
1import tkinter as tk 2 3#画像ファイルへのパスです 4image_path = "image.gif" 5 6shrink_rate = 5 #縮小率です 7 8def xy_print(event): 9 #マウスの現在の座標を表示.座標値を縮小した分大きくしています. 10 line = 'x:' + str((event.x)*shrink_rate) + ' ' + 'y:' + str((event.y)*shrink_rate) 11 entry.delete(0, 20) 12 entry.insert(0, line) 13 14# ウィンドウ作成 15root = tk.Tk() 16root.minsize(896, 816) #ウィンドウのサイズを決定 17 18 19#マウスのある座標値を表示するエントリーです. 20entry = tk.Entry(root) 21entry.place(x=650,y=100) 22 23 24# 画像表示 25img = tk.PhotoImage(file=image_path) 26#ここでimgをshrink_rate分の一のサイズに縮小しています 27img = img.subsample(shrink_rate) 28 29canvas = tk.Canvas(bg="black", width=550, height=750) 30canvas.place(x=0, y=0) 31canvas.create_image(0, 0, image=img, anchor=tk.NW) 32canvas.bind('<Motion>', xy_print) 33 34# メインループ 35root.mainloop()
補足情報
環境はPython 3.6.5。tkinterは8.5です。
表示したい画像のサイズは2479×3508の予定です
因みにmacで動かしています.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/15 12:26