tkscript_macro.py ライブラリ ドキュメント
ライブラリの機能や目的
tkscript_macro.py は、tkScript クラスとその関連機能を提供するモジュールで、独自のスクリプト言語の実行を管理することを目的としています。
このライブラリの主な機能は以下の通りです。
スクリプトの解析と実行: INIファイル形式で記述されたスクリプトを読み込み、解析し、定義されたメニューやボタンに関連付けられた一連のコマンドを実行します。
変数置換: スクリプト内の
$varnameや$(varname)形式の変数を、アプリケーションの環境や設定に基づいて動的に実際の値に置換します。多岐にわたるコマンドのサポート:
外部コマンドの実行。
ファイルやディレクトリの操作(作成、削除、コピー、移動)。
GUIダイアログの表示(メッセージ、入力、ファイル選択、色選択など)。
INIファイルや環境変数の読み書き。
文字列処理やパス操作。
条件付き実行やアプリケーション制御(終了、デバッグモード切替など)。
GUIとの連携:
tklibのGUIコンポーネントと連携し、メニュー、ボタン、ダイアログなどのGUI要素にスクリプト機能を提供します。
このライブラリは、特にTkinterベースのランチャーアプリケーションにおいて、複雑な操作をINI形式のスクリプトで記述し、柔軟に実行するための基盤を提供することで、アプリケーションの拡張性やカスタマイズ性を高める課題を解決します。
importする方法
このライブラリを他のPythonプログラムからインポートするには、以下のいずれかの方法を使用します。
tkscript_macroモジュール全体をインポートする場合:import tkscript_macro # tkScriptクラスを使用する例 script_engine = tkscript_macro.tkScript()
tkscript_macroモジュールからtkScriptクラスを直接インポートする場合:from tkscript_macro import tkScript # tkScriptクラスを使用する例 script_engine = tkScript()
必要な非標準ライブラリとインストール方法
tkscript_macro.py は、以下の非標準ライブラリに依存しています。
tklibこのライブラリは
tklibパッケージ内の様々なモジュール (tkobject,tkparams,tkutils,tkfile,tkgui.tktkinter) を利用しています。
これらのライブラリは、通常 pip コマンドを使用してインストールできます。
pip install tklib
importできるクラスとメソッド
tkscript_macro.py モジュールから直接インポートできる主要な要素は tkScript クラスです。
class tkScript
概要: スクリプト実行エンジンの中核となるクラス。
詳細説明: マクロスクリプトファイルの読み込み、解析、およびコマンドの実行を管理します。スクリプトファイル内のセクション(メインメニューやボタン)を特定し、それらに紐づけられた一連のコマンドを実行する機能を提供します。tklib.tkobject.tkObject を継承しています。
__init__(self, script_files = [], **args)
概要: tkScript クラスのインスタンスを初期化する。
詳細説明: スクリプトファイルのリストと初期設定を基にオブジェクトを構築します。内部で変数を管理するための辞書 self.vars を初期化し、ファイル存在チェックモードを設定します。
引数:
script_files(list[str], オプション): 実行対象となるスクリプトファイルのパスのリスト。デフォルトは空のリスト。args(dict): 親クラスtkObjectに渡される追加のキーワード引数。 戻り値: なし
read_cont_lines(self, fp)
概要: バックスラッシュで連結された複数行のスクリプト行を読み込む。
詳細説明: ファイルポインタ fp から一行ずつ読み込み、行末がバックスラッシュ ('') で終わる場合は次の行と連結します。これにより、スクリプトファイル内で論理的に一行として扱われる複数行のコマンドを正しく処理できます。
引数:
fp(file object): 読み込み対象のファイルポインタ。 戻り値:str: 連結された一行の文字列。ファイル終端に達した場合は空文字列を返します。
decompose_section(self, section)
概要: スクリプトセクション文字列をメニュー名、インデックス、タスクに分解する。
詳細説明: [ButtonXX.MenuName].Task や ButtonXX.MenuName のような形式のセクション文字列を解析し、メニュー名、ボタンインデックス、および関連タスク(例: 'help', 'dbl_click')を抽出します。これにより、スクリプト内の特定のセクションをプログラム的に参照できるようになります。
引数:
section(str): 分解するスクリプトセクションの文字列。 戻り値:tuple[str, int | str, str]:(メニュー名, ボタンインデックス (intまたは空文字列), タスク名 (strまたは空文字列))のタプル。
update_script_vars(self, app, cparams)
概要: アプリケーション変数と環境変数をスクリプトエンジンにロードする。
詳細説明: app.svars からパラメーター辞書を取得し、これに環境変数やアプリケーション固有のパス情報を追加します。また、コマンドライン引数も $0, $1, ..., $a の形で変数として利用可能にします。これらの変数は、後続のスクリプトコマンドで参照できるように self.vars にすべて小文字のキーで格納されます。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。各種変数情報を提供します。cparams(tkParams): アプリケーションの構成パラメータ。 戻り値:dict: 更新されたスクリプト変数辞書 (self.vars)。
show_message(self, app, message)
概要: 指定されたメッセージをアプリケーションのメッセージ表示領域に表示する。
詳細説明: アプリケーションのGUIにメッセージを表示するために、app インスタンスの show_message メソッドを呼び出します。これは、スクリプト実行中にユーザーへの通知やデバッグ情報を提供するのに使用されます。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。メッセージ表示機能を提供します。message(str): 表示するメッセージ文字列。 戻り値: なし
convert_a_var(self, app, var)
概要: 単一の文字列に含まれる変数を実際の値に置換する。
詳細説明: 入力文字列 var 内の $varname または $(varname) 形式の変数を、app.s_engine.vars に格納されている対応する値に置換します。バックスラッシュでエスケープされたドル記号 \$ はそのまま $ として扱われます。未定義の変数が存在し、app.alert_var_error がTrueの場合、エラーダイアログが表示されます。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。変数辞書とエラー表示機能を提供します。var(str): 変数置換を行う対象の文字列。 戻り値:str: 変数が置換された後の文字列。
convert_vars(self, app, vars)
概要: 文字列のリストに含まれるすべての変数を実際の値に置換する。
詳細説明: 与えられた文字列のリスト vars の各要素に対して convert_a_var メソッドを適用し、含まれる変数表記(例: $var, $(var)) を対応する値で置換します。このメソッドは、コマンドの引数を実行前に前処理するために使用されます。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。変数置換機能を提供します。vars(list[str]): 変数置換を行う対象の文字列のリスト。 戻り値:list[str]: 変数が置換された後の文字列のリスト。
execute_external_command(self, app, cmd, args, is_print = False)
概要: 外部コマンドを実行する。
詳細説明: 指定されたコマンドと引数を使用して外部プログラムを実行します。コマンドがPython (.py) または Perl (.pl) スクリプトの場合、それぞれのインタープリタのパスを前置して実行します。コマンドライン引数は適切に引用符で囲まれ、os.system() を使用して同期的に実行されます。デバッグモードの場合や is_print がTrueの場合、実行されるコマンドラインが表示されます。実行前にユーザーに確認を求めるダイアログが表示されることもあります。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。変数、設定、GUI機能を提供します。cmd(str): 実行するコマンド。args(list[str]): コマンドに渡す引数のリスト。is_print(bool, オプション): 実行するコマンドラインをコンソールに表示するかどうか。デフォルトはFalse。 戻り値:int: コマンドの終了コード。エラーが発生した場合は -1 を返します。
execute_a_command(self, app, cparams, line, fp = None, event = None)
概要: スクリプトの1行のコマンドを実行する。
詳細説明: 指定されたスクリプト行 line を解析し、対応する内部コマンドまたは外部コマンドを実行します。コマンドは cmd arg1 arg2 ... の形式で、変数が含まれる場合は実行前に置換されます。
サポートされる主な内部コマンドは以下の通りです。
コメント:
rem,#,:,;アプリケーション制御:
bye,end,call,debug,confirm,load_menuINI/環境変数操作:
read_ini,write_ini,read_ini_all,read_ini_to_vars,load_dotenvメッセージ出力:
print_all,echo,printファイル・ディレクトリ操作:
get_cur_dir,chdir,cd,mkdir,md,rmdir,rd,copy,cp,move,mv,delete,del,rmGUI情報取得:
get_cur_menu,get_cur_menu_file,get_cur_button_idx,get_cur_button_caption文字列処理:
split_str,del_quote,remove_comment,get_first_word,get_last_word,escape_reg,replaceウィンドウ操作:
show_window,set_title設定保存:
save_config変数操作:
set,list_append,list_append_if_exist,set_if_blank,set_if_not_blank,set_if_null,set_if_not_null,set_path,join_pathパス操作:
use_os_path_sep,get_drive,get_directory,get_directory_without_drive,get_last_directory,get_upper_directory,get_filename,get_filebody,get_ext,get_cur_dirファイル/ディレクトリ選択ダイアログ:
get_open_file_name,get_open_file_name_continue,get_save_file_name,get_save_file_name_continue,get_open_dir_name,get_open_dir_name_continue,choose_if_not_existファイル検索:
search_files,search_latest_fileラベル/リスト操作:
read_labels,get_file_list,get_dir_listダイアログ値設定:
set_dialog_values,set_dialog_var,set_file_list設定同期:
setup,copy_config2scars,copy_svars2configダイアログ表示:
color_dialog,font_dialog,input,select_dialog,new_dialog,add_dialog,custom_dialog,custom_dialog_modeless,message_dialog,ask_yesno_dialog,ask_okcancel_dialog評価:
evalGUI要素操作:
add_tooltip,create_menu,add_context_menu,show_context_menuアプリケーション状態設定:
set_message,set_selected_file,set_command_line,set_argument,add_pathアプリケーションパス取得:
get_app_path条件付き終了:
check_file_mode,check_exist,exit_if_defined,exit_if_not_defined,exit_if_exist,exit_if_not_existプロセス待機:
wait_process
上記以外のコマンドは execute_external_command を介して外部プロセスとして実行されます。
引数:
app(tkLauncherApp): アプリケーションのインスタンス。各種機能を提供します。cparams(tkParams): アプリケーションの構成パラメータ。line(str): 実行するスクリプトの1行。fp(file object | None, オプション): 現在読み込み中のスクリプトファイルのファイルポインタ。callコマンドで再帰呼び出しする際に使用されます。デフォルトはNone。event(tkinter.Event | None, オプション): GUIイベントオブジェクト。show_context_menuなどGUI関連コマンドで使用されます。デフォルトはNone。 戻り値:int: コマンドの実行結果。1は成功、0以下はエラーまたは終了を意味します。-1はエラー、またはendコマンドによるセクション終了を示します。
main scriptとして実行したときの動作
tkscript_macro.py ファイルをPythonインタープリタで直接実行した場合 (python tkscript_macro.py)、if __name__ == "__main__": ブロック内の pass ステートメントにより、特に何も処理は実行されません。このファイルは、他のアプリケーションやモジュールからインポートされ、tkScript クラスを利用することを想定して設計されています。