video_converter.gui module
Tkinter による GUI インターフェース。
ウィンドウの構築は Builder パターン (WindowBuilder) で行い、
ウィジェットへの参照は MyWindow が保持する。変換の進捗は
video_converter.progress.FFmpegTCPSender から
TkPBarWriter のコールバックへ通知される (Observer パターン)。
- video_converter.gui.METHODS = {'audio_eliminate': <function audio_eliminate>, 'audio_extract': <function audio_extract>, 'compress': <function compress>, 'to_mp4': <function to_mp4>}
ラジオボタンの選択値と変換関数の対応表
- class video_converter.gui.MyWindow[ソース]
ベースクラス:
objectGUI のウィジェットおよび状態変数への参照を保持するコンテナ。
各属性は
WindowBuilderのcreate_*メソッドによって設定され、 生成前はNoneである。
- class video_converter.gui.StdoutRedirector(text_widget)[ソース]
ベースクラス:
object標準出力を Tkinter のテキストウィジェットへ転送するクラス。
- パラメータ:
text_widget (Text) -- 出力先のテキストウィジェット。
- class video_converter.gui.TkPBarWriter(total=None)[ソース]
ベースクラス:
object進捗の通知を受けて GUI のプログレスバーを更新するクラス (Observer)。
- パラメータ:
total (float | None) -- 動画の合計時間 (秒)。生成時点では不明なため既定は
Noneで、変換開始時にconvert_and_send()がreset()を通じて 設定する。
- class video_converter.gui.WindowBuilder[ソース]
ベースクラス:
objectMyWindowを組み立てる Builder。create_*メソッドはウィジェットを生成して返すと同時に、状態変数をwindowへ登録する。配置 (grid) は呼び出し側の責務とする。- create_console(height, width)[ソース]
標準出力を表示するコンソールを生成する。
副作用として
sys.stdoutをStdoutRedirectorへ差し替え、 ルートウィンドウが破棄された時点で元のsys.stdoutへ戻す ハンドラを登録する。- パラメータ:
height (int) -- コンソールの高さ (行数)。
width (int) -- コンソールの幅 (文字数)。
- 戻り値:
コンソールとして使うテキストウィジェット。
- 戻り値の型:
Text
- create_convert_button(writer)[ソース]
変換を開始するボタンを生成する。
- パラメータ:
writer (TkPBarWriter) -- 進捗をウィジェットへ反映するライター。
- 戻り値:
「変換」ボタン。
- 戻り値の型:
Button
- create_method_options()[ソース]
変換方式を選択するラジオボタン群を生成する。
選択値は
METHODSのキー (to_mp4、audio_extract、audio_eliminate、compress) に対応する。- 戻り値:
ラジオボタンのリスト。
- 戻り値の型:
list[Radiobutton]
- create_path_entry(width)[ソース]
ファイルパス入力欄を生成する。
入力欄自体をドロップ対象として登録する。
- パラメータ:
width (int) -- 入力欄の幅 (文字数)。
- 戻り値:
ファイルパス入力欄。
- 戻り値の型:
Entry
- video_converter.gui._browse_file(string_var)[ソース]
ファイル選択ダイアログを開き、選択されたパスを変数へ設定する。
- パラメータ:
string_var (StringVar) -- 選択されたファイルパスの格納先。
- 戻り値の型:
None
- video_converter.gui._convert(window, pbar_writer)[ソース]
GUI の入力内容にもとづき変換を実行する (例外はそのまま送出する)。
- パラメータ:
window (MyWindow) -- 入力値と進捗ウィジェットを保持するウィンドウ。
pbar_writer (TkPBarWriter) -- 進捗をウィジェットへ反映するライター。
- 戻り値の型:
None
- video_converter.gui._drop_file(event, string_var)[ソース]
ドラッグ&ドロップされたファイルパスを変数へ設定する。
tkinterdnd2 は Windows 形式のパスを
{C:/path/to/file.mp4}のように 波括弧で囲んで渡すため、それを取り除いてから格納する。- パラメータ:
event (Event) --
<<Drop>>イベント。dataにファイルパスを含む。string_var (StringVar) -- ドロップされたファイルパスの格納先。
- 戻り値の型:
None
- video_converter.gui.convert_and_send(window, pbar_writer)[ソース]
GUI の入力内容にもとづき変換を実行する。
FFmpeg の実行と進捗受信を gevent の greenlet で並行に動かし、 両者の完了を待ち合わせる。
変換に失敗した場合、例外はそのままでは Tk が
sys.stderrへ出力して しまい、コンソール領域 (sys.stdoutを転送) にも表示されない。--noconsoleでビルドした実行ファイルでは何も見えなくなるため、 ここで捕捉してダイアログとコンソールの両方へ表示する。- パラメータ:
window (MyWindow) -- 入力値と進捗ウィジェットを保持するウィンドウ。
pbar_writer (TkPBarWriter) -- 進捗をウィジェットへ反映するライター。
- 戻り値の型:
None