pythonで画面キャプチャーツールを作ってみよう(4)

 

今日はキャプチャーツールにタイマー機能をつけてみます。
実行処理は簡単で、窓(自分自身)を消してから
ImageGrab.grab()を発行するまでの間に
time.sleep(待ち時間)を入れるだけです。
それより少し手間なのが GUI部分で、タイマーのON/OFFの切替と
待ち時間(秒数)の入力部分を追加します。

ON/OFF切替には tk.Checkbutton を使います。
秒数入力には tk.Entry を使います。
tk.Checkbuttonには、ONとOFFに対応する値を格納する変数
(variable)を持たせる必要があります。
# Javaの場合は、ON/OFF状態を Checkbox自体から
getState()で得られますが、python(tkinter)の場合は
持たせている変数(variable)の値を見ることになります。

今回、持たせる変数は ON(True)/OFF(False) が
分かればよいので BooleanVar というクラスを使います。
具体的に書くと次のようになります。

        self.cv=tk.BooleanVar()
        self.cv.set(False)
        self.ck=tk.Checkbutton(self.frame,text="delay",variable=self.cv)
        self.te=tk.Entry(self.frame,width=4)
        self.te.insert(tk.END,"3")
        self.ck.pack(side='left')
        self.te.pack(side='left')

self. がついているのはクラスの中に置く(値を保持する必要がある)
からです。cv が CheckButton の ON/OFF に対応する変数で
Checkbutton ck を生成する際に variable=selv.cv という形で与えます。
Entry te が Javaで言う TextField で、行入力を行う箱です。
今回は待ち時間(秒数)を入れるのですが、桁が小さいので width=4 と
幅を狭めています。
ck.pack()やte.pack()で、frameの中に詰めています。
Captureボタン(self.captbtn)やSaveボタン(self.savebtn)の前に
pack()すると先(side=’left’なので左側)に配置されます。
CaptureボタンやSaveボタンの右側に配置したい時は、
savebtnの後に pack()します。(お好みで)
詰め込むものが増えたので、窓の横幅が足りないかもしれませんね。
root.geometry(“200×200”) は
root.geometry(“240×200”) に変更しておきましょう。
それと root.title(“Capture”) を追加して
タイトルをつけておきましょう。

Capture実行時に、cv や te を参照するコードは次のようになります。

        if self.cv.get() :
            d=int(self.te.get())
            time.sleep(d)
        self.img=ImageGrab.grab(bbox=(x,y,x+w,y+h))

cv.get()で cvが持っている値が得られます。
この cv の値を更新するのは Checkbuttonが行ってくれます。
得られる値は、cv が BooleanVar() なので True か False です。
Entry te から get で得られる値は「文字列」なので
int()で「数値」に変換します。time.sleep()に与えるのは
数値ですから。
今日は全コードを掲載するのは保留にしておきます。
ご自身で、上記のコードを追加してみてください。
コードの代わりに自分で自分をキャプチャーした画面イメージを
貼っておきます。

capture toolの画面イメージ

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)