tkapplication_gui.py 技術ドキュメント

ライブラリの機能や目的

tkapplication_gui.py は、tklib.tkapplication.tkApplication を基盤として、Tkinterを用いたグラフィカルユーザーインターフェース(GUI)アプリケーションを構築するための高レベルな機能を提供するライブラリです。

このライブラリの主な目的は以下の通りです。

  • GUIアプリケーションの基盤提供: Tkinterウィンドウ、メニュー、ツールバー、ペイン分割といった基本的なGUI要素の作成・管理を簡素化します。

  • 設定管理の統合: ユーザー設定やアプリケーションパラメータを効率的に管理し、GUIを通じて設定を変更・保存する機能を提供します。

  • 開発・デバッグ支援: アプリケーションの内部状態(設定パラメータ、Tkinter変数、環境変数など)をGUI上で確認できる開発者向けのタブや、コードをインタラクティブに実行できるエディタ機能を提供します。

  • 外部アプリケーション連携: システムにインストールされているエディタ、シェル、ファイルマネージャーなどの外部アプリケーションのパスを自動的に検出し、連携を容易にします。

  • 一貫したユーザーエクスペリエンス: 終了確認ダイアログや設定ダイアログなど、一般的なGUIアプリケーションで必要とされる機能を提供し、一貫したユーザーエクスペリエンスの実現をサポートします。

これにより、開発者はTkinterアプリケーションの定型的なコード記述を減らし、アプリケーションの主要なロジックに集中できるようになります。

importする方法

このライブラリの tkApplication_GUI クラスを他のPythonプログラムからインポートするには、以下のいずれかの方法を使用します。

# 1. クラス名を直接インポートする場合
from tkapplication_gui import tkApplication_GUI

# 2. モジュール全体をインポートし、モジュール名経由でアクセスする場合
import tkapplication_gui

必要な非標準ライブラリとインストール方法

tkapplication_gui.py を使用するために必要な非標準ライブラリと、そのインストール方法を以下に示します。

  • matplotlib:

    • 目的: グラフ描画機能を提供します(matplotlib.use('TkAgg') が使用されているため、Tkinterバックエンドで描画するために必要です)。

    • インストール方法: pip コマンドでインストールできます。

      pip install matplotlib
      
  • tklib:

    • 目的: このライブラリの基盤となる tkApplication クラスや、Tkinterユーティリティ (tktkinter)、パラメータ管理 (tkParams) など、共通のユーティリティ機能を提供します。

    • インストール方法: tklib は一般的なPyPIパッケージではない可能性があります。もしプロジェクト内で提供されるカスタムライブラリである場合は、tkapplication_gui.py と同じ環境で利用できるようにパスを設定するか、プロジェクトの指示に従ってインストールしてください。もし pip でインストール可能な場合は、以下のコマンドでインストールできます。

      pip install tklib
      

補足:

  • tkintertkinter.ttk はPythonの標準ライブラリに含まれています。ただし、OSによってはTkinterをサポートするための追加パッケージ(例: Linuxの python3-tk)のインストールが必要な場合があります。

importできる変数と関数

tkapplication_gui.py モジュールから直接インポートして利用できる主要なエンティティは、tkApplication_GUI クラスのみです。このクラスは tkApplication を継承しており、GUI関連の追加機能を提供します。

クラス: tkApplication_GUI

tkApplication クラスを継承し、TkinterベースのGUIアプリケーション構築のための機能を提供します。

クラス属性:

  • tkvars: tkParams のインスタンス。Tkinterウィジェットに関連付けられた tkinter.StringVar, tkinter.IntVar などの変数を管理します。これらの変数はGUIの状態とデータのバインディングに使用されます。

メソッド:

  • __init__(self, usage_str="", _globals=None, locals=None, use_user_inifile=False, **args)

    • 動作: tkApplication_GUI クラスのコンストラクタです。親クラス tkApplication のコンストラクタを呼び出し、GUIに関連する初期設定(self.tkvars の初期化など)を行います。

    • 引数:

      • usage_str (str, optional): アプリケーションの利用方法を示す文字列。デフォルトは空文字列。

      • _globals (dict, optional): グローバル変数の辞書。通常は globals() を渡します。

      • locals (dict, optional): ローカル変数の辞書。通常は locals() を渡します。

      • use_user_inifile (bool, optional): ユーザー設定ファイルを使用するかどうか。デフォルトは False

      • **args: 親クラス tkApplication に渡される任意のキーワード引数。

    • 戻り値: なし。

  • __del__(self)

    • 動作: デストラクタです。親クラスのデストラクタを呼び出します。

    • 引数: なし。

    • 戻り値: なし。

  • __str__(self)

    • 動作: オブジェクトの文字列表現を返します。

    • 引数: なし。

    • 戻り値: self.ClassPath() メソッドによって生成されたクラスのパス (str)。

  • get_tkvars_dict(self)

    • 動作: self.tkvars に格納されているTkinter変数を通常のPython辞書として取得します。

    • 引数: なし。

    • 戻り値: Tkinter変数のキーと値のペアを含む辞書 (dict)。

  • get_tkvar(self, key, defval=None)

    • 動作: 指定されたキーに対応するTkinter変数 (self.tkvars 内) を取得します。もし変数が存在しない場合は、defval で初期化して設定し、その新しい変数を返します。

    • 引数:

      • key (str): 取得または設定する変数名。

      • defval (any, optional): 変数が存在しない場合に設定するデフォルト値。デフォルトは None

    • 戻り値: self.tkvars から取得または設定された変数オブジェクト。

  • mainloop(self)

    • 動作: Tkinterイベントループを開始します。これにより、GUIアプリケーションがユーザーからの入力に応答できるようになります。

    • 引数: なし。

    • 戻り値: なし。

  • get_screen_size(self)

    • 動作: メインウィンドウ (self.root_window) のスクリーンサイズ(幅と高さ)を取得します。

    • 引数: なし。

    • 戻り値: スクリーン幅 (int) とスクリーン高さ (int) のタプル。

      • 注: コード内の winfo_screenhightwinfo_screenheight のタイプミスの可能性がありますが、ドキュメントは提供されたコードに忠実です。

  • get_geometry(self, window=None)

    • 動作: 指定されたウィンドウ、またはデフォルトでメインウィンドウのジオメトリ文字列と個別の幅、高さ、X座標、Y座標を取得します。

    • 引数:

      • window (tkinter.Widget, optional): ジオメトリを取得する対象のウィンドウ。デフォルトは self.root_window

    • 戻り値: ジオメトリ文字列 (str)、幅 (str)、高さ (str)、X座標 (strまたはNone)、Y座標 (strまたはNone) のタプル。

  • set_geometry(self, window=None, geo=None, w=None, h=None, x0=None, y0=None)

    • 動作: 指定されたウィンドウ、またはデフォルトでメインウィンドウのジオメトリを設定します。ジオメトリは完全な文字列 geo で指定することも、個別の幅 w、高さ h、X座標 x0、Y座標 y0 で指定することもできます。

    • 引数:

      • window (tkinter.Widget, optional): ジオメトリを設定する対象のウィンドウ。デフォルトは self.root_window

      • geo (str, optional): WxH+X+Y 形式の完全なジオメトリ文字列。

      • w (int, optional): 幅。

      • h (int, optional): 高さ。

      • x0 (int, optional): X座標。

      • y0 (int, optional): Y座標。

    • 戻り値: なし。

      • 注: コード内の set_geometoryset_geometry のタイプミスの可能性がありますが、ドキュメントは提供されたコードに忠実です。

  • dialog_setup(self, title='Setup', parent=None, entry_width=30, button_width=4, edit_button_width=2, shell_button_width=0, widgets='editor_path|confirm_on_exit|debug_mode', font_size=10, is_print=False)

    • 動作: アプリケーションの設定(エディタパス、終了確認、デバッグモードなど)を編集するための設定ダイアログを表示します。

    • 引数:

      • title (str, optional): ダイアログのタイトル。デフォルトは 'Setup'

      • parent (tkinter.Widget, optional): ダイアログの親ウィンドウ。デフォルトは self.root_window

      • entry_width (int, optional): 入力フィールドの幅。デフォルトは 30

      • button_width (int, optional): ボタンの幅。デフォルトは 4

      • edit_button_width (int, optional): 編集ボタンの幅。デフォルトは 2

      • shell_button_width (int, optional): シェルボタンの幅。デフォルトは 0

      • widgets (str, optional): ダイアログに表示するウィジェットをパイプ (|) で区切った文字列。デフォルトは 'editor_path|confirm_on_exit|debug_mode'

      • font_size (int, optional): フォントサイズ。デフォルトは 10

      • is_print (bool, optional): 設定の変更をコンソールに出力するかどうか。デフォルトは False

    • 戻り値: なし。

  • on_closing(self, do_confirm=None)

    • 動作: ウィンドウが閉じられようとしているときに呼び出されるイベントハンドラです。終了確認ダイアログを表示し、ユーザーの選択に応じてアプリケーションを終了します。

    • 引数:

      • do_confirm (bool, optional): 終了確認ダイアログを表示するかどうかを明示的に指定します。None の場合、self.configparams.confirm_on_exit の設定を使用します。

    • 戻り値: なし。

  • PanedWindow1(self, main_pane_args={})

    • 動作: ルートウィンドウ内に単一の tkinter.PanedWindow を作成し、それをアプリケーションのメインペインとして設定します。

    • 引数:

      • main_pane_args (dict, optional): メインペインに渡す追加の引数。例えば {'sashwidth': 2} など。

    • 戻り値: 作成された tkinter.PanedWindow インスタンス。

  • PanedWindow2(self, main_pane_args={}, left_pane_args={}, right_pane_args={})

    • 動作: ルートウィンドウ内に tkinter.PanedWindow を作成し、その中に左右2つの tkinter.ttk.Notebook を配置します。これは一般的な2ペインレイアウトを作成するために使用されます。

    • 引数:

      • main_pane_args (dict, optional): メインペインに渡す追加の引数。

      • left_pane_args (dict, optional): 左側のノートブックに渡す追加の引数。

      • right_pane_args (dict, optional): 右側のノートブックに渡す追加の引数。

    • 戻り値: 作成された [メインペイン (tkinter.PanedWindow), 左ノートブック (tkinter.ttk.Notebook), 右ノートブック (tkinter.ttk.Notebook)] のリスト。

  • add_root_panes(self, root=None, type='', sashwidth=2, left_pane_width=50)

    • 動作: ルートウィンドウに指定されたタイプのペインレイアウトを追加します。

    • 引数:

      • root (tkinter.Widget, optional): ペインを追加するルートウィジェット。デフォルトは self.root_window

      • type (str, optional): 作成するペインのタイプ。

        • '' (空文字列): ルートウィンドウ自体を返します。

        • 'pane1': 単一の tkinter.ttk.Notebook を作成し、これをルートペインとします。

        • 'pane2': 2ペインの PanedWindow レイアウト (左右のノートブック) を作成します。

      • sashwidth (int, optional): ペインのサッシの幅。デフォルトは 2

      • left_pane_width (int, optional): 'pane2' タイプの場合の左ペインの初期幅。デフォルトは 50

    • 戻り値: 作成されたペインウィジェットのリスト。

  • move_top(self, f=True)

    • 動作: アプリケーションのメインウィンドウを最前面に移動するかどうかを設定します。

    • 引数:

      • f (bool, optional): True の場合、ウィンドウを最前面に表示します。False の場合、通常の表示に戻します。デフォルトは True

    • 戻り値: なし。

  • create_subwindow(self)

    • 動作: メインウィンドウの子ウィンドウとして新しいToplevelウィンドウを作成します。

    • 引数: なし。

    • 戻り値: 作成された tkinter.Toplevel インスタンス。

  • create_window(self, title=None, type='', geometry=None, minsize=None, iconfile=None, sashwidth=2, left_pane_width=50, icon_path=None, relief='ridge', borderwidth=2, bg='white', default_font=None)

    • 動作: アプリケーションのメインとなるTkinterウィンドウを作成し、その設定(タイトル、ジオメトリ、アイコン、フォントなど)を行います。

    • 引数:

      • title (str, optional): ウィンドウのタイトル。

      • type (str, optional): 現在使用されていませんが、将来的な拡張のためのプレースホルダーかもしれません。

      • geometry (str, optional): WxH+X+Y 形式の初期ジオメトリ文字列。

      • minsize (tuple, optional): ウィンドウの最小サイズ (幅, 高さ)。

      • iconfile (str, optional): ウィンドウのアイコンファイルへのパス。

      • sashwidth (int, optional): ペインのサッシの幅 (未実装の引数)。

      • left_pane_width (int, optional): 左ペインの初期幅 (未実装の引数)。

      • icon_path (str, optional): ウィンドウのアイコンファイルへのパス(iconfile と同様の機能)。

      • relief (str, optional): ウィンドウのボーダーリリーフスタイル。デフォルトは 'ridge'

      • borderwidth (int, optional): ウィンドウのボーダー幅。デフォルトは 2

      • bg (str, optional): ウィンドウの背景色。デフォルトは 'white'

      • default_font (tuple, optional): ウィンドウ内のウィジェットに適用されるデフォルトのフォント設定 (フォント名, サイズ)。

    • 戻り値: 作成された tkinter.Tk インスタンス (ルートウィンドウ)。

  • create_menu(self, **kwargs)

    • 動作: ルートウィンドウにメニューバーを作成します。

    • 引数:

      • **kwargs: tkinter.Menu コンストラクタに渡される任意のキーワード引数。

    • 戻り値: 作成された tkinter.Menu インスタンス。

  • create_toolbar(self, **kwargs)

    • 動作: ルートウィンドウにツールバーフレームを作成します。

    • 引数:

      • **kwargs: tkinter.Frame コンストラクタに渡される任意のキーワード引数。

    • 戻り値: 作成された tkinter.Frame インスタンス。

  • get_editor(self)

    • 動作: 設定済みのエディタパス、または環境変数から検出されたエディタパスを取得します。

    • 引数: なし。

    • 戻り値: 検出されたエディタの実行可能ファイルのパス (str)。見つからない場合は空文字列。

  • print_tkvars_info(app, cparams, tkvars)

    • 動作: self.tkvars に格納されているTkinter変数の情報を、アプリケーションの警告出力機能 (app.print_warning) を使用して表示します。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。通常、このメソッドは self として呼び出されます。

      • cparams (tkParams): 設定パラメータのインスタンス。

      • tkvars (dict): self.tkvars.get_param_dict() から取得されるTkinter変数の辞書。

    • 戻り値: なし。

  • print_cparams_info(app, cparams, tkvars, copy_tkvars=None)

    • 動作: cparams (アプリケーションのパラメータ) の情報を警告出力機能を使用して表示します。オプションで tkvars から cparams へのコピー関数を実行できます。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。

      • cparams (tkParams): 設定パラメータのインスタンス。

      • tkvars (dict): Tkinter変数の辞書。

      • copy_tkvars (callable, optional): tkvars から cparams に値をコピーするための関数。

    • 戻り値: なし。

  • print_config_info(app, config, tkvars, copy_tkvars=None)

    • 動作: config (アプリケーションの設定) の情報を警告出力機能を使用して表示します。オプションで tkvars から config へのコピー関数を実行できます。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。

      • config (tkParams): 設定のインスタンス。

      • tkvars (dict): Tkinter変数の辞書。

      • copy_tkvars (callable, optional): tkvars から config に値をコピーするための関数。

    • 戻り値: なし。

  • create_editor_frame(app, frame, head_label_args={}, entry_width=60, eval_button_args=[], show_path_select=True)

    • 動作: 指定されたフレーム内に、テキスト編集エリア、パス入力、実行ボタンを備えたエディタフレームを作成します。ユーザーはここにコードを入力して実行できます。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。

      • frame (tkinter.Frame): エディタフレームを配置する親フレーム。

      • head_label_args (dict, optional): ヘッダーラベルに渡す引数。デフォルトは {'text': 'Path:'}

      • entry_width (int, optional): パス入力エントリーの幅。デフォルトは 60

      • eval_button_args (dict, optional): 実行ボタンに渡す引数。デフォルトは空のリストですが、実際は辞書が期待されます(例: {'text': 'eval', 'width': 4})。

      • show_path_select (bool, optional): パス選択ボタンとエントリーを表示するかどうか。デフォルトは True

    • 戻り値: エディタフレーム (tkinter.Frame)。

  • create_editor_tab(app, config, cparams, pane, title, entry_width=60, eval_button_args={})

    • 動作: 指定されたノートブックペインに、エディタ機能を備えた新しいタブを作成します。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。

      • config (tkParams): アプリケーションの設定オブジェクト。

      • cparams (tkParams): アプリケーションのパラメータオブジェクト。

      • pane (tkinter.ttk.Notebook): タブを追加するノートブックウィジェット。

      • title (str): タブのタイトル。

      • entry_width (int, optional): エディタ内のエントリーウィジェットの幅。デフォルトは 60

      • eval_button_args (dict, optional): 実行ボタンに渡す追加の引数。

    • 戻り値: 作成されたエディタフレーム (tkinter.Frame)。

  • create_development_tab(app, config, cparams, parent_notebook, copy_tkvars=None)

    • 動作: アプリケーションの開発・デバッグを支援するための特別なタブを作成します。このタブには、スクリプトパスの表示、ライブラリパスの表示、アプリケーションの状態(appcparamstkvarsconfig、環境変数など)を表示するボタン、およびインタラクティブなコードエディタが含まれます。

    • 引数:

      • app (tkApplication_GUI): tkApplication_GUI のインスタンス。

      • config (tkParams): アプリケーションの設定オブジェクト。

      • cparams (tkParams): アプリケーションのパラメータオブジェクト。

      • parent_notebook (tkinter.ttk.Notebook): 開発タブを追加するノートブックウィジェット。

      • copy_tkvars (callable, optional): tkvars から他のパラメータオブジェクトに値をコピーするための関数。

    • 戻り値: 作成されたノートブックフレーム (tkinter.Frame)。

  • get_editors(self, additional_list=[], filename_only=False)

    • 動作: 一般的に使用されるエディタの実行可能ファイルのパスをシステムから検出してリストで返します。

    • 引数:

      • additional_list (list, optional): 検出対象に追加するエディタ名のリスト。

      • filename_only (bool, optional): ファイル名のみを返すかどうか。デフォルトは False (フルパスを返す)。

    • 戻り値: 検出されたエディタの実行可能ファイルのパスのリスト (list of str)。

  • get_start_apps(self, additional_list=[], filename_only=False)

    • 動作: ファイルを開くための一般的なアプリケーション(例: start コマンド、xdg-open)の実行可能ファイルのパスを検出してリストで返します。

    • 引数:

      • additional_list (list, optional): 検出対象に追加するアプリケーション名のリスト。

      • filename_only (bool, optional): ファイル名のみを返すかどうか。デフォルトは False

    • 戻り値: 検出されたアプリケーションの実行可能ファイルのパスのリスト (list of str)。

  • get_shells(self, additional_list=[], filename_only=False)

    • 動作: 一般的に使用されるシェルの実行可能ファイルのパスをシステムから検出してリストで返します。

    • 引数:

      • additional_list (list, optional): 検出対象に追加するシェル名のリスト。

      • filename_only (bool, optional): ファイル名のみを返すかどうか。デフォルトは False

    • 戻り値: 検出されたシェルの実行可能ファイルのパスのリスト (list of str)。

  • get_filers(self, additional_list=[], filename_only=False)

    • 動作: 一般的に使用されるファイルマネージャー(ファイラー)の実行可能ファイルのパスをシステムから検出してリストで返します。

    • 引数:

      • additional_list (list, optional): 検出対象に追加するファイラー名のリスト。

      • filename_only (bool, optional): ファイル名のみを返すかどうか。デフォルトは False

    • 戻り値: 検出されたファイラーの実行可能ファイルのパスのリスト (list of str)。

  • get_external_apps(self, paths, use_default=True, filename_only=False)

    • 動作: 指定されたパスのリスト、およびデフォルトの一般的な外部アプリケーション(エディタ、シェルなど)の実行可能ファイルのパスをシステムから検出してリストで返します。

    • 引数:

      • paths (list): 検出対象に追加するアプリケーション名のリスト。

      • use_default (bool, optional): デフォルトの一般的なアプリケーションも検出対象に含めるかどうか。デフォルトは True

      • filename_only (bool, optional): ファイル名のみを返すかどうか。デフォルトは False

    • 戻り値: 検出された外部アプリケーションの実行可能ファイルのパスのリスト (list of str)。

main scriptとして実行したときの動作

tkapplication_gui.py ファイルを直接Pythonインタプリタで実行した場合、if __name__ == "__main__": ブロック内の main() 関数が呼び出されます。

main() 関数は以下のメッセージを標準出力に出力し、その後プログラムを終了します。

This is library, not runnable

この動作から、tkapplication_gui.py は単体で実行されることを意図したスクリプトではなく、他のアプリケーションからインポートされて利用されるライブラリとして設計されていることがわかります。