【Python】windowを閉じる方法(Windows・Mac・Linux対応)

windowをPythonプログラムからコントロールしたいことがあると思います。
意外と面倒です。WindowsとLinux OSについてウィンドウを閉じる方法をサンプルコードでご紹介します。

ブラウザの場合、Seleniumを利用する方法があります。
Sleeniumを使いたくない場合、ブラウザ以外が対象の場合、どちらにも対応可能です。

それでは見ていきましょう!

目次

ショートカットキーを使う

非常に万能なのがショートカットキーです。
「ctrl」+「w」でウィンドウを閉じることができます。


pyautoguiモジュールをインストールしておけば簡単に実装できます。
pyautoguiモジュールは、画面上でのマウスやキーボードの操作をシミュレートするためのツールです。
ウィンドウの移動・クリック、キーボードの入力などをプログラム内から自動化できます。
GUIテスト、自動化スクリプト、デモの作成などに利用されます。
座標指定や画像認識に基づく操作も可能で、クロスプラットフォームで動作します。

インストールは簡単です。
pip installするだけです。

pip install pyautogui

サンプルコードは次です。

import pyautogui

pyautogui.hotkey('ctrl', 'w')

前提として、ウィンドウをアクティベートしておく必要があります。
また、対象ウィンドウが無くても閉じようとするため、誤作動がある可能性があります。
その代わり、非常に簡単です。

pygetwindowを使う(Windows・Mac)

別の方法として、pygetwindowを使ってウィンドウを制御したいと思います。

pygetwindowは、Pythonプログラム内でウィンドウの検出や制御を行うためのモジュールです。
主にWindowsとmacOSを対象としており、
特定のウィンドウを取得・制御したり、ウィンドウの情報を取得したりできます。
ウィンドウのリストを取得し、タイトルや位置、サイズなどの属性にアクセス可能です。
さらに、ウィンドウのアクティブ化や最小化、閉じる操作も行えます。
ただし、Linuxプラットフォームでは動作が保証されていない場合があります。

ウィンドウ名を確認できるため、ショートカットよりも誤作動しにくくすることができます。

pipでインストールできます。

pip install pygetwindow

下記はメモ帳を閉じるサンプルです。
window_titleを変えて対象ウィンドウを変更できます。

import pygetwindow

window_title = "メモ帳"

window = pygetwindow.getWindowsWithTitle(window_title)
if window:
    window[0].close()

xdotoolを使う(Linux)

pygetwindowはLinuxで動作しないことがあるため、別の方法をやってみたいと思います。

xdotoolを使います。
xdotoolはLinux上でX Window Systemの操作を自動化するためのコマンドラインツールです。
マウスカーソルの移動、クリック、キーボード入力などをシミュレートし、
ウィンドウの操作やアプリケーションの自動化に使用されます。
ターミナルやスクリプト内でコマンドを実行し、X Window Systemの各種操作を行います。
GUIテストやタスクの自動化、UIスクリプトの作成に活用されます。

インストールには次を実行します。

sudo apt-get update
sudo apt-get install xdotool

下記はchromiumブラウザを閉じるサンプルです。
ウィンドウ名を変えると対象を変えられます。

import subprocess

window_title = "chromium"

try:
    window_id = subprocess.check_output(['xdotool', 'search', '--name', window_title]).decode().strip()
    subprocess.call(['xdotool', 'windowkill', window_id])
except subprocess.CalledProcessError:
    window_id = None

ウィンドウが見つからない場合にエラーになってしまうため、try-except構文にしてあります。
この辺の回避方法は色々ありそうですね。

サンプルコード

別記事でOS種類を判別する方法をご紹介していました。
掛け合わせて、OSごとに処理を変えるサンプルコードにしてみたいと思います。

import platform

system = platform.system()
window_title = "メモ帳"

if system == "Windows" or system == "Darwin":
    import pygetwindow
    window = pygetwindow.getWindowsWithTitle(window_title)
    if window:
        window[0].close()
elif system == "Linux":
    import subprocess
    try:
        window_id = subprocess.check_output(['xdotool', 'search', '--name', window_title]).decode().strip()
        subprocess.call(['xdotool', 'windowkill', window_id])
    except subprocess.CalledProcessError:
        window_id = None
else:
    raise NotImplementedError("未知のオペレーティングシステムです。")

プラスアルファで関数化までしてしまえば、ウィンドウを閉じるサブモジュールとして使えそうですね。

今回は以上となります。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次