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

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

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

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

Q&A

解決済

1回答

1997閲覧

python3 tkinter pyautoguiでマウス座標を取得して自動更新したい

Untitled_Sample

総合スコア192

Python 3.x

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

0グッド

0クリップ

投稿2019/06/01 06:20

マウス座標を取得する処理を書いて最後にループで回してるので自動更新できると思ったのですが
できてません。どの様にすれば良いのでしょうか?

#コード

python

1 2 3 4import pyautogui 5import tkinter as tk 6 7 8# メインウィンドウ作成 9root = tk.Tk() 10 11#メインウィンドウのタイトルを変更 12root.title("Tkinter test") 13 14 15#メインウィンドウを640x480にする 16root.geometry("360x480") 17 18 19 20 21def pushed(): 22 pass 23 24 25#マウス座標を取得する 26x=pyautogui.position() 27 28 29 30#ラベルを追加 31label = tk.Label(root, text=x) 32#表示 label.grid() 33label.place(x=10, y=10) 34label.update() 35#label.delete() 36 37 38button = tk.Button(root, text="ボタン", command=pushed) 39#button.grid() 40button.place(x=250, y=5) 41 42 43 44 45#rootを表示し無限ループ 46root.mainloop() 47 48

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

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

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

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

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

guest

回答1

0

ベストアンサー

root.mainloop()はその前方に書いた処理を無限に行うものではなく、イベントを無限に待ち受け処理するループです。
目的を達するためには以下のようにマウスが動いたイベントに対してコマンドを定義する必要があります。
参考:Mouse Position Python Tkinter

Python

1import pyautogui 2import tkinter as tk 3 4def motion(event): 5 #マウス座標を取得する 6 px,py = pyautogui.position() 7 label['text'] = '{},{}'.format(px,py) 8 9def pushed(): 10 pass 11 12root = tk.Tk() 13root.title("Tkinter test") 14root.geometry("360x480") 15 16label = tk.Label(root) 17label.place(x=10, y=10) 18label.update() 19 20root.bind('<Motion>', motion) # *** 21 22button = tk.Button(root, text="ボタン", command=pushed) 23button.place(x=250, y=5) 24 25#rootを表示し無限ループ 26root.mainloop()

コメントを受けて

ウインドウの外側でもマウス座標を更新するためにはタイマーを使えばよいです。

Python

1import pyautogui 2import tkinter as tk 3 4def timer(): 5 px,py = pyautogui.position() 6 label['text'] = '{},{}'.format(px,py) 7 root.after(10, timer) 8 9root = tk.Tk() 10root.title("Tkinter test") 11root.geometry("360x480") 12 13label = tk.Label(root) 14label.place(x=10, y=10) 15label.update() 16 17timer() # *** 18 19root.mainloop()

投稿2019/06/01 07:19

編集2019/06/01 08:00
can110

総合スコア38262

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

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

Untitled_Sample

2019/06/01 07:43

ウィンド外に出た時でも更新したいのですが、可能でしょうか?
can110

2019/06/01 08:00 編集

タイマー処理を使えば可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問