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()に与えるのは
数値ですから。
今日は全コードを掲載するのは保留にしておきます。
ご自身で、上記のコードを追加してみてください。
コードの代わりに自分で自分をキャプチャーした画面イメージを
貼っておきます。
この記事へのコメントはこちら