Pythonでマウス座標をリアルタイムで取得して表示するGUIアプリを作る
- 作成日: 2023-06-15
- 更新日: 2023-12-25
- カテゴリ: Python
Pythonでマウス座標を取得する
Pythonでマウス座標を取得するにはpyautogui
を使うのが簡単です。
結論から言うとマウス座標は
import pyautogui as pag
x, y = pag.position()
print(x, y)
で取得、表示できます。
今回はこのpyautogui
を使ってGUIアプリを作ります。
マウスの座標をリアルタイムでウィンドウ上に表示するというアプリです。
GUIの制作にはPythonの標準ライブラリであるTkinterを使います。
pyautoguiのインストール
pip
などで以下のようにpyautogui
をインストールします。
$ pip install pyautogui
インストール後はimport pyautogui
ができるようになります。
座標ウォッチャー・アプリの制作
今回制作するアプリのコードは以下になります。
import pyautogui as pag
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('座標ウォッチャー')
self.label = tk.Label(self, text='')
self.label.pack(expand=True, fill=tk.BOTH, pady=10, padx=10)
self.after(33, self.update)
def update(self):
x, y = pag.position()
self.label.config(text=f'{x} {y}')
self.after(33, self.update)
App().mainloop()
このアプリを実行すると以下のようなウィンドウが表示されます。
座標ウォッチャーのコードを解説
まずimport
ではpyautogui
とtkinter
をインポートします。
import pyautogui as pag
import tkinter as tk
それからtk.Tk
クラスを継承してウィンドウとなるApp
を作ります。
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('座標ウォッチャー')
self.label = tk.Label(self, text='')
self.label.pack(expand=True, fill=tk.BOTH, pady=10, padx=10)
self.after(33, self.update)
def update(self):
x, y = pag.position()
self.label.config(text=f'{x} {y}')
self.after(33, self.update)
self.title()
でウィンドウのタイトルを設定します。
self.title('座標ウォッチャー')
self.label
を作ります。このラベルに座標が表示されます。
self.label.pack()
でウィジェットをウィンドウ上に配置しますが、expand=True
は親ウィンドウに合わせて伸縮するかどうかのフラグ、fill=tk.BOTH
はウィジェットを親ウィジェットに対してどのように埋めるかの指定でここでは上下左右に埋めるようにしています。pady=10, padx=10
で上下左右にパディング(空白)を入れています。
self.label = tk.Label(self, text='')
self.label.pack(expand=True, fill=tk.BOTH, pady=10, padx=10)
self.after()
はアニメーションなどで使われる関数です。
この関数は第1引数の指定のミリ秒後に第2引数の関数を呼び出します。
ここでは33ミリ秒後にself.update
を呼び出しています。
self.after(33, self.update)
self.update()
内ではpag.position()
でマウス座標を取得します。
その座標をself.label.config()
でラベルのテキストに文字列として設定しています。
再びself.after()
でself.update()
を再帰的に呼び出します。
def update(self):
x, y = pag.position()
self.label.config(text=f'{x} {y}')
self.after(33, self.update)
App
を定義したらオブジェクトにしてmainloop()
を実行します。
こうするとウィンドウが起動します。
App().mainloop()
おわりに
今回はPythonでマウス座標を取得して表示するということをやってみました。
なにか参考になれば幸いです