質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

3430閲覧

tkinterで縮小表示したgifファイルの正確な座標をマウスで取得できません

appletiger

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2019/04/15 10:55

編集2019/04/15 11:12

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で動かしています.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

少なくともWindows上であればGetMouseMovePointsExにて(マウスデバイスがその機能をサポートしていれば)デバイスレベルで0~0xFFFFまでの座標範囲を取得することができます。
すなわちサブピクセル単位で座標値を取得する手段があります。
しかし一般的にはマウスカーソル座標は画面のピクセル単位の座標値しか得ることができません。
tkinterでも検索かけてみましたがサブピクセル単位でカーソル座標を取得できる手段は見つかりませんでした。
ということで不可能だと思われます。
参考:Why is it not possible to obtain mouse coordinates as floating point values?

投稿2019/04/15 11:38

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

appletiger

2019/04/15 12:26

回答ありがとうございます マジですか・・ わずかな望みにかけてもう少し聞いてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問