今回は、Tkinterと’PIL’ライブラリの’ImageGrab’モジュールを使いボタンを押すことでウィンドウをキャプチャするプログラムを紹介します。
ウィンドウを作成しよう
Tkinterを使いウィンドウを作成します。
import tkinter as tk
root = tk.Tk()
root.title("画面キャプチャ")
root.geometry("400x400")
root.mainloop()
ウィンドウの作成方法に関しては下記の記事でまとめていますのでこちらをご覧ください。
上記コードを実行すると下記画像のが実行結果として出力されます。
今回はこの画面をキャプチャするためにボタンを作成し、ボタン押すことで画面キャプチャされ保存されるようなプログラムを作成します。
画面キャプチャ用のボタンを作成
ボタンを作成するにはTkinterの’Button()’クラスを使いボタンを作成します。
button = tk.Button(root, text="画面キャプチャ")
button.pack(padx=10, pady=10)
ボタンを追加するとウィンドウ内に画面キャプチャのボタンが出力されます。
この後、ボタンを押すことで画面キャプチャするプログラムを追加します。
ImageGrabを使って画面キャプチャをする方法
画面キャプチャをするには、’PIL’ライブラリの’ImageGrab’モジュールを読み込む必要があります。
‘PIL’は、Pythonで画像処理を行うためのライブラリです。Pillowというフォーク版があり、PillowがPILと互換性があるため、ここではPillowをインストールする方法を説明します。
Pillowをインストールするには、ターミナルまたはコマンドプロンプトを開いて、次のコマンドを実行します。
py -m pip install pillow
インストールすることが出来たら’ImageGrab’モジュールを読み込みます。
from PIL import ImageGrab
読み込むことが出来たら、画面キャプチャをしキャプチャ画像を保存する関数を作成します。
def capture():
image = ImageGrab.grab(bbox=(root.winfo_rootx(), root.winfo_rooty(),
root.winfo_rootx() + root.winfo_width(),
root.winfo_rooty() + root.winfo_height()))
image.save("screenshot.png")
‘capture’という関数を作成し、’image’変数を作成し’ImageGrab.grab()’メソッドを使いTkinterのウィンドウをキャプチャするために、ウィンドウの座標を指定します。
最後に’save()’メソッドを使い画像ファイルを保存します。
今回は、’screenshot.png’で保存されます。
最後に、ボタンを押すことで先ほど作成した関数を実行したいのでボタンに’command’を追加しボタンが押されたときに呼び出される関数を指定します。
button = tk.Button(root, text="画面キャプチャ", command=capture)
button.pack(padx=10, pady=10)
最終的なコードは下記コードになります。
import tkinter as tk
from PIL import ImageGrab
def capture():
image = ImageGrab.grab(bbox=(root.winfo_rootx(), root.winfo_rooty(),
root.winfo_rootx() + root.winfo_width(),
root.winfo_rooty() + root.winfo_height()))
image.save("screenshot.png")
root = tk.Tk()
root.title("画面キャプチャ")
root.geometry("400x400")
button = tk.Button(root, text="画面キャプチャ", command=capture)
button.pack(padx=10, pady=10)
root.mainloop()
画面キャプチャボタンを押すことでPythonファイルと同じファイルパス内に’screenshot.png’という画像が追加され、画像を確認すると画面キャプチャされたウィンドウの画像が出力されます。
まとめ
今回は、ボタンを押すことでウィンドウを画面キャプチャする単純なプログラムでしたが、グラフ部分を画面キャプチャしたり必要な部分をキャプチャすることも可能です。
Tkinterの’frame’でグループ化した部分を画面キャプチャすることも可能なのでアイディア次第で画面キャプチャを使ったアプリケーションを制作することも可能です。