ユーニックス総合研究所

  • home
  • archives
  • python-zahyo-syutoku

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ではpyautoguitkinterをインポートします。

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でマウス座標を取得して表示するということをやってみました。
なにか参考になれば幸いです