スクリーンショット scrot のUI
python + pygtkを使ってscrotのUIを作ってみました。
kss.pyというファイルのみです。
現状では、設定した内容を次回の起動時に引き継ぐことができません。
kss.pyというファイルのみです。
現状では、設定した内容を次回の起動時に引き継ぐことができません。
実行するためには、以下のものが必要です。
- scrot
- python
- pygtk
実行方法:
python kss.py
ソースコード
以下は表示の都合で行頭に余分なスペースがあります。
コピペする場合には御注意ください。
(ソースファイルはこのページの一番下に添付しました。ファイル名:kss.py)
コピペする場合には御注意ください。
(ソースファイルはこのページの一番下に添付しました。ファイル名:kss.py)
#!/usr/bin/python # -*- coding: euc_jp -*- import os import pygtk pygtk.require('2.0') import gtk # # class KaniSnapShotWindow: ''' スクリーンショットを取るコマンド「scrot」のフロントエンド。 GUIで設定された内容をもとに文字列を作成して コマンドとして実行する。 ''' DEF_FILE_NAME = '%Y-%m-%d_$wx$h.png' DEF_OUTPUT_DIR = '~/' ## def __init__(self, i_filename = DEF_FILE_NAME, i_outputDir = DEF_OUTPUT_DIR, i_delaySec = 0, i_sel = False, i_oneshot = True): ''' 初期化処理 GTKを使ってユーザインターフェイスを生成する。 ''' # ウインドウを生成する。 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect('delete_event', self.on_quit) self.window.set_border_width(5) contentsBox = gtk.VBox(False, 0) # ファイル名入力フィールドを作成してウインドウに配置 fnameBox = gtk.HBox(False, 0) label = gtk.Label('File Name:') label.set_size_request(100, -1) fnameBox.pack_start(label, False, False, 0) self.filename = gtk.Entry() if len(i_filename) > 0: self.filename.set_text(i_filename) fnameBox.pack_start(self.filename, False, False, 0) contentsBox.pack_start(fnameBox, False, False, 2) # 画像の最終保存先ディレクトリ選択用UIを作成してウインドウに配置 dirBox = gtk.HBox(False, 0) label = gtk.Label('Output Directory:') label.set_size_request(100, -1) dirBox.pack_start(label, False, False, 0) self.outputDir = gtk.Entry() if len(i_outputDir) > 0: self.outputDir.set_text(i_outputDir) dirBox.pack_start(self.outputDir, False, False, 0) btn = gtk.Button('...') btn.connect('clicked', self.on_button_sel_output_dir) dirBox.pack_end(btn, False, False, 0) contentsBox.pack_start(dirBox, False, False, 2) # ディレイ入力フィールドを作成してウインドウに配置 delayBox = gtk.HBox(False, 0) # ラベルを配置 label = gtk.Label('Delay:') label.set_size_request(100, -1) delayBox.pack_start(label, False, False, 0) # コンボボックスを配置し、コンボボックスのメニュー項目を初期化 self.delayCombo = gtk.combo_box_new_text() for i in range(5): self.delayCombo.append_text(str(i)+' sec') self.delayCombo.set_active(i_delaySec) delayBox.pack_start(self.delayCombo, False, False, 0) contentsBox.pack_start(delayBox, False, False, 2) # そのほかのオプション fr = gtk.Frame(' Options: ') optBox = gtk.VBox(False, 4) optBox.set_border_width(5) # チェックボックス配置 self.chkSelection = gtk.CheckButton('Select window or rectangle.') self.chkSelection.set_active(i_sel) optBox.pack_start(self.chkSelection, False, False, 0) # チェックボックス配置 self.chkOneShot = gtk.CheckButton('One shot') self.chkOneShot.set_active(i_oneshot) optBox.pack_start(self.chkOneShot, False, False, 0) fr.add(optBox) contentsBox.pack_start(fr, False, False, 2) # セパレータを配置 sep = gtk.HSeparator() contentsBox.pack_start(sep, False, False, 2) # ボタン類の配置 # (1) closeボタン btnBox = gtk.HBox(False, 0) btn = gtk.Button('Close') btn.connect('clicked', self.on_button_close) btnBox.pack_start(btn, True, False, 0) # (2) スクリーンショットボタン btn = gtk.Button('Shoot') btnBox.pack_end(btn, True, False, 0) btn.connect('clicked', self.on_button_shoot) contentsBox.pack_start(btnBox, False, False, 2) # ウインドウの表示 self.window.add(contentsBox) self.window.show_all() # GTKのイベントループを開始 gtk.main() ## def on_button_close(self, widget, event = None, data = None): ''' closeボタンが押された場合の処理 ''' print 'close' self.on_quit(widget, event, data) ## def on_button_shoot(self, widget, event = None, data = None): ''' scrotコマンド文字列を作成して実行する。 ''' # 出力先のディレクトリが存在することを確認。 # 存在しない場合には処理を中断 outdir = os.path.expanduser(self.outputDir.get_text()) outdir = os.path.normpath(outdir) if os.path.isdir(outdir) == False: print 'no such directory:%s' % outdir return # scrotコマンドの引数の情報(リスト)を作成 cmdArg = ['scrot'] fname = self.filename.get_text() if len(fname) > 0: cmdArg.append(fname) cmdArg += ['-e', 'mv $f %s' % outdir, '-d', str(self.delayCombo.get_active())] # Select window or rectangleのチェックがONだったら、 # -sオプションを追加。 if self.chkSelection.get_active(): cmdArg.append('-s') # ウインドウをアイコン隠す self.window.hide_all() # スクリーンショットを取る前にkss自身のウインドウを閉じる while gtk.events_pending(): gtk.main_iteration() # スクリーンショットを取る rc = os.spawnvp(os.P_WAIT, 'scrot', cmdArg) print '== complete ==' # One shotだったらそのまま終了。 # そうでなければkss自身のウインドウを表示状態に戻す。 if self.chkOneShot.get_active(): self.on_quit(widget, event, data) else: self.window.show_all() ## def on_button_sel_output_dir(self, widget, event = None, data = None): ''' ディレクトリ選択ダイアログを表示。 選択されたディレクトリをテキストフィールドに設定する。 ''' print 'output dir sel' chooser = gtk.FileChooserDialog('Select Output Directory', None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) chooser.set_default_response(gtk.RESPONSE_OK) # ディレクトリ選択ダイアログを実行 resp = chooser.run() if resp != gtk.RESPONSE_OK: chooser.destroy() return # 選択結果を入力フィールドに設定 self.outputDir.set_text(chooser.get_filename()) # ダイアログの破棄 chooser.destroy() ## def on_quit(self, widget, event = None, data = None): ''' ウインドウが閉じられる(終了する)際に実行すべき処理。 ''' print 'on_quit' # GTKのイベントループを終了させる。 gtk.main_quit() return False # # def kss_main(): KaniSnapShotWindow() # # if __name__ == '__main__': kss_main()
コメント
- コメントをいただけるとうれしいです。 -- (かに3) 2007-01-14 04:36:47
添付ファイル