tktkinter.py 技術ドキュメント
ライブラリの機能や目的
tktkinter.py は、Pythonの標準GUIライブラリである tkinter を拡張し、より機能豊富で使いやすいGUIコンポーネント、ダイアログ、およびユーティリティを提供することを目的としたライブラリです。特に、ファイル・フォルダ選択、外部アプリケーション実行、設定管理、および matplotlib を用いたグラフ描画キャンバスの統合といった一般的なGUIアプリケーションのニーズに対応します。
主な機能は以下の通りです。
GUIコンポーネントのラッパーと拡張:
tkinterの標準ウィジェット(ボタン、エントリー、テキストエリア、チェックボックスなど)をラップし、追加機能(例: 右クリックメニュー、テキストの特殊表示)を提供します。ファイル・パス操作UI: ファイル選択ダイアログ、フォルダ選択ダイアログ、ファイルパスの入力と管理、外部アプリケーションでのファイル編集・実行を容易にするコンポーネントを提供します。
ダイアログ: 情報表示、警告、エラー、確認(Yes/No、OK/Cancel、Retry/Cancel)、数値・文字列入力、リスト選択、カスタム設定といった多様なダイアログをサポートします。
matplotlib連携:tkinterアプリケーション内にmatplotlibのグラフを埋め込むためのキャンバスウィジェットを提供し、インタラクティブなデータ可視化を可能にします。設定管理と動的UI生成: アプリケーション設定値を管理し、設定ファイルから動的にGUIを生成する汎用的なカスタムダイアログ(
tkCustomDialog_by_config)を提供します。これにより、複雑な設定画面も柔軟に構築できます。外部プロセス実行: システムシェルや指定された外部プログラムを実行するためのヘルパー関数を提供します。
このライブラリは、tkinter アプリケーションの開発を加速し、よりリッチなユーザーエクスペリエンスを提供するための基盤となります。
importする方法
tktkinter.py ライブラリを他のPythonプログラムからインポートするには、以下のいずれかの方法を使用します。
A. 全ての関数とクラスを直接インポートする場合:
from tktkinter import *
B. tktkinter モジュールとしてインポートし、プレフィックスを付けて使用する場合:
import tktkinter as ttk_ext
# 例: ttk_ext.Button(...)
通常は、必要な特定のコンポーネントやダイアログのみをインポートするか、上記Bの方法でモジュール全体をインポートして使用することが推奨されます。
必要な非標準ライブラリとインストール方法
tktkinter.py が動作するために必要となる非標準ライブラリは以下の通りです。
matplotlib: グラフ描画機能を提供します。特にCanvas関数が依存しています。インストール方法:
pip install matplotlib
tklibパッケージ:tktkinter.pyは、ローカルのtklibパッケージ(具体的にはtklib.tkutilsとtklib.tkparamsモジュール)に依存しています。このパッケージは
pipでインストールする一般的なライブラリではなく、tktkinter.pyと同じプロジェクト内、またはPythonの検索パス上で利用可能である必要があります。通常、tktkinter.pyと同じディレクトリ構造(例:tklib/tkutils.pyなど)で配置されていることを想定します。もしtklibが利用できない場合は、関連するエラーが発生します。
importできる変数と関数
このライブラリからインポートできる主要な変数と関数、クラスを以下に示します。多くの関数は、アプリケーションの状態を管理する app オブジェクトを最初の引数として受け取ります。app はカスタムのアプリケーションクラスのインスタンスを想定しています。
関数
set_variable_from_list(app, key, var)動作:
appオブジェクトのtkvars属性に指定されたkeyでvarを設定します。これは、tkinter変数と内部的なキーを関連付けるヘルパー関数として機能します。引数:
app: アプリケーションのルートオブジェクト。key: 変数を識別するための文字列キー。var:tkinterの変数オブジェクト(例:tkinter.StringVar,tkinter.IntVarなど)。
戻り値:
var(入力されたtkinter変数オブジェクト)。
execute_command(app, command, working_dir = None, is_print = False, files = [])動作: 指定されたコマンドをシステム上で実行します。コマンドライン引数として
filesを追加できます。working_dirが指定された場合、コマンド中の%(dir)はそのディレクトリに置換されます。引数:
app: アプリケーションのルートオブジェクト。command: 実行するコマンド文字列。角括弧[]を使用して引数を指定できます。working_dir(str, optional): コマンドを実行する作業ディレクトリ。デフォルトはNone。is_print(bool, optional): 実行されるコマンドを標準出力に表示するかどうか。デフォルトはFalse。files(list, optional): コマンドに渡すファイルパスのリスト。デフォルトは[]。
戻り値:
os.system()の戻り値(通常はコマンドの終了コード)。
folder_button_click(app, entry_variable, ini_dir = '.', title = None, mustexist = True, entry_type = 'entry', entry_filemask = '*;*.*')動作: フォルダ選択ダイアログを表示し、ユーザーが選択したフォルダパスを指定された
tkinter変数に設定します。entry_typeが 'combobox' の場合、選択したフォルダ内のファイルリストをコンボボックスの値として設定できます。引数:
app: アプリケーションのルートオブジェクト。entry_variable: 選択されたパスを設定するためのtkinter変数。ini_dir(str, optional): ダイアログの初期表示ディレクトリ。デフォルトは.(カレントディレクトリ)。title(str, optional): ダイアログのタイトル。デフォルトはNone。mustexist(bool, optional): 選択されたフォルダが存在しなければならないか。デフォルトはTrue。entry_type(str, optional): 関連するエントリーウィジェットのタイプ('entry' または 'combobox')。デフォルトは 'entry'。entry_filemask(str, optional): 'combobox' タイプで使用されるファイルマスク。デフォルトは'*;*.*'。
戻り値: なし。
path_button_click(app, entry_variable, ini_dir = '.', title = None, file_type = [("All", "*.*")], entry_type = 'entry', entry_filemask = '*;*.*', check_exist = True)動作: ファイル選択またはファイル保存ダイアログを表示し、ユーザーが選択したファイルパスを指定された
tkinter変数に設定します。引数:
app: アプリケーションのルートオブジェクト。entry_variable: 選択されたパスを設定するためのtkinter変数。ini_dir(str, optional): ダイアログの初期表示ディレクトリ。デフォルトは.。title(str, optional): ダイアログのタイトル。デフォルトはNone。file_type(list, optional): ファイルタイプフィルタのリスト(例:[("Text files", "*.txt"), ("All files", "*.*")])。デフォルトは[("All", "*.*")]。entry_type(str, optional): 関連するエントリーウィジェットのタイプ('entry' または 'combobox')。デフォルトは 'entry'。entry_filemask(str, optional): 'combobox' タイプで使用されるファイルマスク。デフォルトは'*;*.*'。check_exist(bool, optional): ファイルの存在チェックを行うか(Trueでファイル選択、Falseでファイル保存ダイアログ)。デフォルトはTrue。
戻り値: なし。
edit_button_click(app, entry_variable, editor_path = None)動作:
entry_variableに設定されているパスのファイルを、指定されたエディタまたはアプリケーションの設定エディタで開きます。引数:
app: アプリケーションのルートオブジェクト。entry_variable: 編集するファイルのパスを含むtkinter変数。editor_path(str, optional): 使用するエディタのパス。Noneの場合、app.get_editor()を使用します。デフォルトはNone。
戻り値: なし。
shell_button_click(app, cmd = None)動作: システムのシェル(コマンドプロンプトなど)を開きます。
cmdが指定された場合、そのコマンドをシェルで実行します。引数:
app: アプリケーションのルートオブジェクト。cmd(str, optional): シェルで実行するコマンド。デフォルトはNone(単にシェルを開く)。
戻り値: なし。
color_dialog(app = None, parent = None, title = None, color = None)動作: 色選択ダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。parent: ダイアログの親ウィジェット。title: ダイアログのタイトル。color: 初期選択色。
戻り値: 選択された色(タプル形式:
((R, G, B), '#RRGGBB'))またはNone。
font_dialog(app = None, parent = None, title = None, color = None)動作: フォント選択ダイアログを表示します(Tkの
fontchooserコマンドを使用)。この機能はTk 8.6.13以降で完全にサポートされる予定です。引数:
app: アプリケーションのルートオブジェクト。parent: ダイアログの親ウィジェット。title: ダイアログのタイトル。color: 未使用の引数。
戻り値: 選択されたフォントの仕様文字列または
None。
dialog_askfloat(app, title = 'Input float value', message = 'Input float value', initialvalue = None, minvalue = None, maxvalue = None)動作: 浮動小数点数値を入力するためのダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Input float value'。message(str, optional): ダイアログに表示するメッセージ。デフォルトは'Input float value'。initialvalue(float, optional): 初期値。デフォルトはNone。minvalue(float, optional): 最小許容値。デフォルトはNone。maxvalue(float, optional): 最大許容値。デフォルトはNone。
戻り値: 入力された浮動小数点数値、またはキャンセルされた場合は
None。
askinteger(app, title = 'Input float value', message = 'Input float value', initialvalue = None, minvalue = None, maxvalue = None)動作: 整数値を入力するためのダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Input float value'。message(str, optional): ダイアログに表示するメッセージ。デフォルトは'Input float value'。initialvalue(int, optional): 初期値。デフォルトはNone。minvalue(int, optional): 最小許容値。デフォルトはNone。maxvalue(int, optional): 最大許容値。デフォルトはNone。
戻り値: 入力された整数値、またはキャンセルされた場合は
None。
askstring(app, title = 'Input text', message = 'Input float value', initialvalue = None)動作: 文字列を入力するためのダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Input text'。message(str, optional): ダイアログに表示するメッセージ。デフォルトは'Input float value'。initialvalue(str, optional): 初期値。デフォルトはNone。
戻り値: 入力された文字列、またはキャンセルされた場合は
None。
dialog_showinfo(app, title = 'Information', message = 'no message')動作: 情報メッセージダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Information'。message(str, optional): 表示するメッセージ。デフォルトは'no message'。
戻り値: なし。
dialog_showwarning(app, title = 'Warning', message = 'no message')動作: 警告メッセージダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Warning'。message(str, optional): 表示するメッセージ。デフォルトは'no message'。
戻り値: なし。
dialog_showerror(app, title = 'Error', message = 'no message')動作: エラーメッセージダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Error'。message(str, optional): 表示するメッセージ。デフォルトは'no message'。
戻り値: なし。
dialog_retrycancel(app, title = 'Retry?', message = 'Do you want to retry?')動作: リトライ/キャンセル選択ダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Retry?'。message(str, optional): 表示するメッセージ。デフォルトは'Do you want to retry?'。
戻り値: リトライが選択された場合は
True、キャンセルされた場合はFalse。
dialog_yesno(app, title = 'Quit', message = 'Do you really quit the program?')動作: はい/いいえ選択ダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Quit'。message(str, optional): 表示するメッセージ。デフォルトは'Do you really quit the program?'。
戻り値: 「はい」が選択された場合は
True、「いいえ」が選択された場合はFalse。
dialog_okcancel(app, title = 'Quit', message = 'Do you really quit the program?')動作: OK/キャンセル選択ダイアログを表示します。
引数:
app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。デフォルトは'Quit'。message(str, optional): 表示するメッセージ。デフォルトは'Do you really quit the program?'。
戻り値: OKが選択された場合は
True、キャンセルされた場合はFalse。
Menu(app, parent = None, **kwargs)動作:
tkinter.Menuウィジェットを生成するラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): メニューの親ウィジェット。デフォルトはNone。**kwargs:tkinter.Menuに渡されるその他のキーワード引数。
戻り値:
tkinter.Menuオブジェクト。
Frame(app, parent = None, **kwargs)動作:
tkinter.Frameウィジェットを生成するラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): フレームの親ウィジェット。デフォルトはNone。**kwargs:tkinter.Frameに渡されるその他のキーワード引数。
戻り値:
tkinter.Frameオブジェクト。
CheckButton(app, parent = None, variable = None, defvalue = False, command = None, onvalue = True, offvalue = False, **kwargs)動作:
tkinter.Checkbuttonウィジェットを生成するラッパー関数。デフォルト値の設定や変数管理を簡素化します。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): チェックボタンの親ウィジェット。デフォルトはNone。variable(tkinter.Variable, optional): チェックボタンの状態を保持するtkinter変数。デフォルトはNone(自動生成)。defvalue(bool, optional):variableがNoneの場合に設定される初期値。デフォルトはFalse。command(callable, optional): チェックボタンの状態が変更されたときに呼び出される関数。デフォルトはNone。onvalue: チェックされたときにvariableに設定される値。デフォルトはTrue。offvalue: チェック解除されたときにvariableに設定される値。デフォルトはFalse。**kwargs:tkinter.Checkbuttonに渡されるその他のキーワード引数。
戻り値:
tkinter.Checkbuttonオブジェクト(variable属性に内部で生成された変数を保持)。
Entry(app, parent = None, **kwargs)動作:
tkinter.Entryウィジェットを生成するラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): エントリーの親ウィジェット。デフォルトはNone。**kwargs:tkinter.Entryに渡されるその他のキーワード引数。
戻り値:
tkinter.Entryオブジェクト。
Combobox(app, parent = None, **kwargs)動作:
tkinter.ttk.Comboboxウィジェットを生成するラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): コンボボックスの親ウィジェット。デフォルトはNone。**kwargs:tkinter.ttk.Comboboxに渡されるその他のキーワード引数。
戻り値:
tkinter.ttk.Comboboxオブジェクト。
Button(app, parent = None, **kwargs)動作:
tkButtonクラス(tkinter.Buttonの拡張)を生成するラッパー関数。キャプションの国際化(app.p()) を適用します。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): ボタンの親ウィジェット。デフォルトはNone。**kwargs:tkButtonに渡されるその他のキーワード引数。
戻り値:
tkButtonオブジェクト。
Text(app, parent = None, **kwargs)動作:
tkinter.Textウィジェットを生成するラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): テキストウィジェットの親。デフォルトはNone。**kwargs:tkinter.Textに渡されるその他のキーワード引数。
戻り値:
tkinter.Textオブジェクト。
Canvas(app, parent = None, canvas_args = {}, **kwargs)動作:
matplotlibグラフを埋め込むためのtkinter.Frameとmatplotlib.backends.backend_tkagg.FigureCanvasTkAggを組み合わせたキャンバスウィジェットを作成します。サイズ変更時の再描画やマウスイベント(クリック、右クリック)のハンドリング機能が含まれます。引数:
app: アプリケーションのルートオブジェクト。app.figure,app.canvas,app.canvas_widget属性が設定されます。parent(tkinter.Widget, optional): キャンバスの親ウィジェット。デフォルトはNone。canvas_args(dict, optional): キャンバスの追加設定。以下のキーをサポートします。use_scrollbar(bool): スクロールバーを使用するかどうか。デフォルトはFalse。figsize(list):matplotlib.Figureの初期サイズ(インチ単位の幅と高さ)。デフォルトは[6, 6]。min_canvas_size(list): キャンバスの最小サイズ(ピクセル単位の幅と高さ)。デフォルトは[3, 3]。
**kwargs:tkinter.Frameに渡されるその他のキーワード引数(ただし、ここでは使用されていません)。
戻り値:
FigureCanvasTkAggオブジェクト(ただし、実際には内部のtkinter.Frameがパックされ、この関数はFigureCanvasTkAggのインスタンスを返しているように見えますが、返り値はFigureCanvasTkAgg自体です)。
RangeFrame(app, parent = None, frame_args = {}, head_label_args = {}, x0_entry_args = {}, center_label_args = {}, x1_entry_args = {}, gridframe = None, igridrow = None)動作: 2つのエントリー(通常は
tkSpinbox)とラベルを組み合わせて、範囲指定用のUIフレームを作成します。主にグリッドレイアウトでの使用を想定しています。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): 親ウィジェット。デフォルトはNone。frame_args(dict, optional): 外側のtkinter.Frameのキーワード引数。デフォルトは{}。head_label_args(dict, optional): 先頭のtkinter.Labelのキーワード引数。デフォルトは{}。x0_entry_args(dict, optional): 最初の値入力用エントリーのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。デフォルトは{}。center_label_args(dict, optional): 中央のtkinter.Labelのキーワード引数。デフォルトは{}。x1_entry_args(dict, optional): 2番目の値入力用エントリーのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。デフォルトは{}。gridframe(tkinter.Frame, optional): 既存のフレームをグリッドレイアウトの親として使用する場合、そのフレームオブジェクト。デフォルトはNone。igridrow(int, optional):gridframeを使用する場合の行インデックス。デフォルトはNone。
戻り値: 生成された
tkinter.Frameオブジェクト。
ComboboxFrame(app, parent, frame_args = { 'bg': 'dim gray' }, head_label_args = { 'text': 'Input module:' }, combobox_args = { 'textvariable': ['varname', None], 'values': ['abc', 'def'], 'default': 'def', 'width': 10 }, tail_label_args = { 'text': '' }, gridframe = None, igridrow = None, is_print = False, **kwargs)動作: ラベルと
tkinter.ttk.Comboboxを組み合わせたUIフレームを作成します。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget): 親ウィジェット。frame_args(dict, optional): 外側のtkinter.Frameのキーワード引数。デフォルトは{'bg': 'dim gray'}。head_label_args(dict, optional): 先頭のtkinter.Labelのキーワード引数。デフォルトは{'text': 'Input module:'}。combobox_args(dict, optional):tkinter.ttk.Comboboxのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。デフォルトは{'textvariable': ['varname', None], 'values': ['abc', 'def'], 'default': 'def', 'width': 10}。tail_label_args(dict, optional): 末尾のtkinter.Labelのキーワード引数。デフォルトは{'text': ''}。gridframe(tkinter.Frame, optional): 既存のフレームをグリッドレイアウトの親として使用する場合、そのフレームオブジェクト。デフォルトはNone。igridrow(int, optional):gridframeを使用する場合の行インデックス。デフォルトはNone。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。**kwargs: 未使用のキーワード引数。
戻り値: 生成された
tkinter.Frameオブジェクト。
PathFrame(app, parent = None, frame_args = {}, head_label_args = None, entry_args = None, combobox_args = None, spinbox_args = None, tail_label_args = None, button_args = None, save_button_args = None, edit_button_args = None, copy_button_args = None, optionmenu_args = None, menubotton_args = None, shell_button_args = None, font_size = 10, gridframe = None, grid_args = {}, igridrow = None, is_print = False, **kwargs)動作: パス入力用のエントリー(
tkEntry、tkinter.ttk.Combobox、またはtkSpinboxのいずれか)、ラベル、ファイル/フォルダ選択ボタン、編集ボタン、コピーボタン、外部アプリ選択メニュー、シェル実行ボタンなどを組み合わせて複雑なパス操作UIフレームを作成します。非常に汎用性が高く、多様な構成が可能です。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): 親ウィジェット。デフォルトはNone。frame_args(dict, optional): 外側のtkinter.Frameのキーワード引数。デフォルトは{}。head_label_args(dict, optional): 先頭のtkinter.Labelのキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。デフォルトはNone。entry_args(dict, optional):tkEntryのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。widthが0の場合、表示されません。デフォルトはNone。combobox_args(dict, optional):tkinter.ttk.Comboboxのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。widthが0の場合、表示されません。デフォルトはNone。spinbox_args(dict, optional):tkSpinboxのキーワード引数。textvariableにリスト[key, var_obj]を渡すと、app.tkvarsに登録されます。widthが0の場合、表示されません。デフォルトはNone。tail_label_args(dict, optional): 末尾のtkinter.ttk.Labelのキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。デフォルトはNone。button_args(dict, optional): ファイル選択ボタン (tkinter.Button) のキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。commandが指定されない場合、path_button_clickが呼び出されます。デフォルトはNone。save_button_args(dict, optional): ファイル保存ボタン (tkinter.Button) のキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。commandが指定されない場合、path_button_clickが呼び出されます。デフォルトはNone。edit_button_args(dict, optional): 編集ボタン (tkinter.Button) のキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。commandが指定されない場合、edit_button_clickが呼び出されます。デフォルトはNone。copy_button_args(dict, optional): コピーボタン (tkinter.Button) のキーワード引数。textはapp.p()で国際化されます。commandが指定されない場合、エントリーの値をクリップボードにコピーする機能が設定されます。デフォルトはNone。optionmenu_args(dict, optional): 外部アプリケーション選択用tkinter.OptionMenuのキーワード引数。widthが0の場合、表示されません。commandが指定されない場合、選択されたアプリケーションでパスを開くexecute_commandが呼び出されます。デフォルトはNone。menubotton_args(dict, optional):tkinter.Menubuttonのキーワード引数。widthが0の場合、表示されません。デフォルトはNone。shell_button_args(dict, optional): シェル実行ボタン (tkinter.Button) のキーワード引数。textはapp.p()で国際化されます。widthが0の場合、表示されません。commandが指定されない場合、shell_button_clickが呼び出されます。デフォルトはNone。font_size(int, optional): 使用するフォントサイズ。デフォルトは10。gridframe(tkinter.Frame, optional): 既存のフレームをグリッドレイアウトの親として使用する場合、そのフレームオブジェクト。デフォルトはNone。grid_args(dict, optional):grid()メソッドに渡されるキーワード引数。デフォルトは{}。igridrow(int, optional):gridframeを使用する場合の行インデックス。デフォルトはNone。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。**kwargs:PathFrame内部で使用される追加のキーワード引数(ini_dir,file_typeなど)。
戻り値: 生成された
tkinter.Frameオブジェクト。entry,combobox,spinbox,button,save_button,edit_button,copy_button,optionmenu,menubotton,shell_button属性を介して内部ウィジェットにアクセスできます。
LabelEntryFrame(app, parent = None, frame_args = {}, label_args = None, entry_args = None, combobox_args = None, spinbox_args = None, gridframe = None, grid_args = {}, igridrow = 0)動作: ラベルと単一のエントリー(またはコンボボックス、スピンボックス)を組み合わせたUIフレームを作成する
PathFrameのラッパー関数。引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): 親ウィジェット。デフォルトはNone。frame_args(dict, optional): 外側のtkinter.Frameのキーワード引数。デフォルトは{}。label_args(dict, optional): ラベルのキーワード引数(PathFrameのhead_label_argsに対応)。デフォルトはNone。entry_args(dict, optional): エントリーのキーワード引数(PathFrameのentry_argsに対応)。デフォルトはNone。combobox_args(dict, optional): コンボボックスのキーワード引数(PathFrameのcombobox_argsに対応)。デフォルトはNone。spinbox_args(dict, optional): スピンボックスのキーワード引数(PathFrameのspinbox_argsに対応)。デフォルトはNone。gridframe(tkinter.Frame, optional): 既存のフレームをグリッドレイアウトの親として使用する場合、そのフレームオブジェクト。デフォルトはNone。grid_args(dict, optional):grid()メソッドに渡されるキーワード引数。デフォルトは{}。igridrow(int, optional):gridframeを使用する場合の行インデックス。デフォルトは0。
戻り値: 生成された
tkinter.Frameオブジェクト。
make_check_box(app, cparams, tkvars, parent, grid_frame, varname = 'none', label = None, values = None, defval = True, reset_val = True, help_text = None, button1_args = None, button2_args = None, onvalue = True, offvalue = False, igridrow = 0)動作: チェックボックスウィジェットとその関連ボタン(デフォルト値設定、ヘルプ表示)を作成します。
引数:
app: アプリケーションのルートオブジェクト。cparams: 設定パラメータを含む辞書。tkvars:tkinter変数を管理するオブジェクト(tkParamsのインスタンスを想定)。parent(tkinter.Widget): 親ウィジェット。grid_frame(tkinter.Frame): グリッドレイアウトの親として使用するフレーム。varname(str, optional): チェックボックスの状態を保持する変数の名前。デフォルトは'none'。label(str, optional): チェックボックスに表示するテキスト。デフォルトはvarname。values: 未使用の引数。defval(bool or int, optional): チェックボックスの初期値。デフォルトはTrue。reset_val(bool or int, optional): 「デフォルト」ボタンが押されたときに設定される値。デフォルトはTrue。help_text(str, optional): ヘルプボタンが押されたときに表示されるテキスト。デフォルトはf"help_{varname}"。button1_args(dict, optional): 最初の追加ボタンのキーワード引数。"command"キーに'set_default'や'show_help'を指定すると、対応する内部関数が呼び出されます。デフォルトはNone。button2_args(dict, optional): 2番目の追加ボタンのキーワード引数。"command"キーに'set_default'や'show_help'を指定すると、対応する内部関数が呼び出されます。デフォルトはNone。onvalue: チェックされたときに変数が取る値。デフォルトはTrue。offvalue: チェック解除されたときに変数が取る値。デフォルトはFalse。igridrow(int, optional):grid_frame内での行インデックス。デフォルトは0。
戻り値: なし。
make_var_box(app, cparams, tkvars, parent, grid_frame, varname = 'none', vartype = 'int', label = None, values = None, from_ = None, to = 100, increment = 10, box_width = 6, defval = 0, reset_val = None, help_text = None, button1_args = None, button2_args = None, igridrow = 0)動作: 数値(整数、浮動小数点数)または文字列を入力するためのエントリー/スピンボックス/コンボボックスウィジェットと、関連するボタンを作成します。
引数:
app: アプリケーションのルートオブジェクト。cparams: 設定パラメータを含む辞書。tkvars:tkinter変数を管理するオブジェクト(tkParamsのインスタンスを想定)。parent(tkinter.Widget): 親ウィジェット。grid_frame(tkinter.Frame): グリッドレイアウトの親として使用するフレーム。varname(str, optional): 変数の名前。デフォルトは'none'。vartype(str, optional): 変数のタイプ('int','str','double'/'float')。デフォルトは'int'。label(str, optional): 表示するラベルテキスト。デフォルトはvarname。values(list, optional): コンボボックスとして使用する場合の選択肢のリスト。デフォルトはNone(エントリーまたはスピンボックスを使用)。from_(float or int, optional): スピンボックスの最小値。デフォルトはNone。to(float or int, optional): スピンボックスの最大値。デフォルトは100。increment(float or int, optional): スピンボックスの増分値。デフォルトは10。box_width(int, optional): エントリー/スピンボックス/コンボボックスの幅。デフォルトは6。defval(any, optional): 変数の初期値。リストまたはタプルの場合、config.get(varname, _defval)形式で設定を読み込みます。デフォルトは0。reset_val(any, optional): 「デフォルト」ボタンが押されたときに設定される値。デフォルトはNone。help_text(str, optional): ヘルプボタンが押されたときに表示されるテキスト。デフォルトはf"help_{varname}"。button1_args(dict, optional): 最初の追加ボタンのキーワード引数。"command"キーに'set_default'や'show_help'を指定すると、対応する内部関数が呼び出されます。デフォルトはNone。button2_args(dict, optional): 2番目の追加ボタンのキーワード引数。"command"キーに'set_default'や'show_help'を指定すると、対応する内部関数が呼び出されます。デフォルトはNone。igridrow(int, optional):grid_frame内での行インデックス。デフォルトは0。
戻り値: 生成された
tkinter.Frameオブジェクト。
make_path_frame(app, cparams, parent, grid_frame, tkvar, varname, file_type = [("All", "*.*")], working_dir = '.', open_command = None, post_open_command = None, head_label_width = 10, entry_width = 60, button_width = 12, button_args = None, copy_button_args = None, edit_button_width = 6, edit_button_args = None, shell_button_width = 2, optionmenu_width = 3, font_size = 10, is_print = True, igridrow = 0)動作: ファイルパス入力、選択ボタン、編集ボタン、外部アプリケーションでの実行、シェル実行などの機能を持つ
PathFrameを作成するヘルパー関数。lambda関数で変数が正しく捕捉されるように、ローカルスコープで変数を使用する設計になっています。引数:
app: アプリケーションのルートオブジェクト。cparams: 設定パラメータを含む辞書。parent(tkinter.Widget): 親ウィジェット。grid_frame(tkinter.Frame): グリッドレイアウトの親として使用するフレーム。tkvar:tkinter変数を管理するオブジェクト(tkParamsのインスタンスを想定)。varname(str): パスを保持する変数の名前。file_type(list, optional): ファイル選択ダイアログのファイルタイプフィルタ。デフォルトは[("All", "*.*")]。working_dir(str, optional): パス選択ダイアログの初期ディレクトリや外部コマンドの作業ディレクトリ。デフォルトは.。open_command(callable, optional): ファイル選択ボタンが押されたときに実行されるカスタムコマンド。デフォルトはNone。post_open_command(callable, optional): ファイル選択後に実行されるカスタムコマンド。デフォルトはNone。head_label_width(int, optional): 先頭ラベルの幅。デフォルトは10。entry_width(int, optional): エントリーウィジェットの幅。デフォルトは60。button_width(int, optional): ファイル選択ボタンの幅。デフォルトは12。button_args(dict, optional): ファイル選択ボタンのキーワード引数。デフォルトはNone。copy_button_args(dict, optional): コピーボタンのキーワード引数。デフォルトはNone。edit_button_width(int, optional): 編集ボタンの幅。デフォルトは6。edit_button_args(dict, optional): 編集ボタンのキーワード引数。デフォルトはNone。shell_button_width(int, optional): シェルボタンの幅。デフォルトは2。optionmenu_width(int, optional): オプションメニューの幅。デフォルトは3。font_size(int, optional): 使用するフォントサイズ。デフォルトは10。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはTrue。igridrow(int, optional):grid_frame内での行インデックス。デフォルトは0。
戻り値: 生成された
PathFrameオブジェクト。
Editor(app, parent = None, frame_args = {}, head_label_args = {}, entry_args = {}, tail_label_args = None, button_args = {}, eval_button_args = None, **kwargs)動作: ファイルパス入力フィールドとテキストエリアを組み合わせた、簡易的なエディタ風UIコンポーネントを作成します。テキストエリアには右クリックメニュー(カット、コピー、ペースト、削除、全選択)が組み込まれています。
引数:
app: アプリケーションのルートオブジェクト。parent(tkinter.Widget, optional): 親ウィジェット。デフォルトはNone。frame_args(dict, optional): 外側のtkinter.Frameのキーワード引数。デフォルトは{}。head_label_args(dict, optional): パス入力部分の先頭ラベルのキーワード引数。デフォルトは{}。entry_args(dict, optional): パス入力部分のエントリーのキーワード引数。デフォルトは{}。tail_label_args(dict, optional): パス入力部分の末尾ラベルのキーワード引数。デフォルトはNone。button_args(dict, optional): パス入力部分のファイル選択ボタンのキーワード引数。デフォルトは{}。eval_button_args(dict, optional): パス入力部分のシェル実行ボタンのキーワード引数。デフォルトはNone。**kwargs: テキストウィジェット(tkinter.Text) に渡されるその他のキーワード引数。
戻り値: 生成された
tkinter.Frameオブジェクト。PathFrame、entry、eval_button、Text属性を介して内部ウィジェットにアクセスできます。
add_widget(self, c)動作:
tkCustomDialog_by_configクラスの内部で使用されるヘルパー関数で、configオブジェクト (c) の定義に基づいて様々なウィジェット(ラベル、ボタン、エントリー、チェックボックス、リストボックス、コンボボックス、ラジオボタン、スピンボックス、ファイル/ディレクトリ選択フィールド、タブなど)を動的に生成し、ダイアログに追加します。引数:
self:tkCustomDialog_by_configインスタンス。c: ウィジェットのタイプ、変数名、引数、オプションなどを定義する設定オブジェクト。
戻り値: なし。
クラス
class tkScrolledListbox(tkinter.Listbox)親クラス:
tkinter.Listbox動作: 垂直スクロールバー付きの
tkinter.Listboxを提供します。Listbox とスクロールバーは内部のtkinter.Frameにまとめて配置されます。メソッド:
clear(): Listbox の内容を全て削除します。
class tkEntry(tkinter.ttk.Entry)親クラス:
tkinter.ttk.Entry動作: 右クリックメニュー(Cut, Copy, Paste, Delete, Select all)を追加した
tkinter.ttk.Entryを提供します。属性:
app: アプリケーションのルートオブジェクト。default_fontfamily: デフォルトのフォントファミリー(初期値は空文字列)。default_fontsize: デフォルトのフォントサイズ(初期値は10)。menu: 右クリック時に表示されるtkinter.Menuオブジェクト。
class tkSpinbox(tkinter.Spinbox)親クラス:
tkinter.Spinbox動作: 右クリックメニュー(Cut, Copy, Paste, Delete, Select all)を追加した
tkinter.Spinboxを提供します。属性:
app: アプリケーションのルートオブジェクト。default_fontfamily: デフォルトのフォントファミリー(初期値は"Yu Gothic UI")。default_fontsize: デフォルトのフォントサイズ(初期値は10)。menu: 右クリック時に表示されるtkinter.Menuオブジェクト。
class tkButton(tkinter.Button)親クラス:
tkinter.Button動作: テキスト設定時に特定のプレフィックス
!!!を認識し、そのテキストに打ち消し線(取り消し線)と赤色フォントを適用する機能を持つtkinter.Buttonの拡張です。メソッド:
set_text(caption): ボタンのテキストを設定します。captionが!!!で始まる場合、残りの部分が打ち消し線付きの赤色テキストとして表示されます。get_text(): 現在ボタンに表示されているテキストを取得します。
class tkSetupDialog(tkinter.simpledialog.Dialog)親クラス:
tkinter.simpledialog.Dialog動作: アプリケーションの各種設定(エディタパス、Pythonパス、Perlパス、VESTAパス、シェルパス、ファイルマネージャーパス、終了時確認、デバッグモード、ログ表示など)を行うための設定ダイアログです。
widgets引数で表示する設定項目を制御できます。引数:
master: 親ウィジェット。app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。entry_width(int, optional): パス入力エントリーの幅。デフォルトは30。button_width(int, optional): ボタンの幅。デフォルトは4。edit_button_width(int, optional): 編集ボタンの幅。デフォルトは2。shell_button_width(int, optional): シェルボタンの幅。デフォルトは2。widgets(str, optional): 表示する設定ウィジェットをパイプ|で区切った文字列。デフォルトは'enditor_path|confirm_on_exit|debug_mode'。font_size(int, optional): ウィジェットのフォントサイズ。デフォルトは10。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。
メソッド:
body(master): ダイアログの本体ウィジェットを構築します。buttonbox(): OK/Cancel ボタン(ここでは "Apply" と "Cancel")を配置します。switchButtonState():Applyボタンの状態を切り替えます(現在は使用されていません)。apply(): ダイアログが閉じられたときに、ユーザーの入力設定をapp.configparamsに適用します。
class tkdialog_yesno(tkinter.simpledialog.Dialog)親クラス:
tkinter.simpledialog.Dialog動作: シンプルな Yes/No 確認ダイアログを表示します。
引数:
master: 親ウィジェット。title(str, optional): ダイアログのタイトル。message(str, optional): 表示するメッセージ。width(int, optional): メッセージラベルの幅。デフォルトは80。
属性:
ret: 選択結果(Yes/No)。
メソッド:
body(master): ダイアログの本体(メッセージラベル)を構築します。buttonbox(): Yes/No ボタンを配置します。
class tkCustomDialog_by_config(tkinter.simpledialog.Dialog)親クラス:
tkinter.simpledialog.Dialog動作:
config引数で与えられたウィジェット定義のリストに基づいて、完全にカスタマイズ可能なダイアログを動的に生成します。様々なタイプのウィジェットを柔軟に組み合わせることができます。引数:
master: 親ウィジェット。app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。config(list): ウィジェット定義オブジェクトのリスト。各オブジェクトはwidget,var,args,varsなどの属性を持つことを想定しています。buttons(str, optional): 表示するボタンの種類を制御する文字列(例:"okcancel","yesno","close")。デフォルトは"okcancel"。modeless(bool, optional): モーダルダイアログとして開くか(False)、モードレスダイアログとして開くか(True)。デフォルトはFalse。callback(callable, optional): ダイアログが閉じられたときに呼び出されるコールバック関数。デフォルトはNone。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。
属性:
ret: ダイアログが閉じられたときに、各ウィジェットから取得された値を含む辞書。vars: 各ウィジェットの値を保持する一般的な変数辞書。tkvars: 各ウィジェットのtkinter変数を管理するtkParamsオブジェクト。widget_vars: 各ウィジェットのインスタンス自体を管理するtkParamsオブジェクト。
メソッド:
body(master):configに基づいて、ウィジェット定義をadd_widget関数に渡し、ダイアログ本体を動的に構築します。buttonbox(): 指定されたbuttonsに応じてボタンを配置します。update_vars(): ダイアログ内の各ウィジェットから現在の値を取得し、self.retに格納します。apply(): ダイアログが閉じられたときにupdate_vars()を呼び出します。
class tkSelectDialog(tkinter.simpledialog.Dialog)親クラス:
tkinter.simpledialog.Dialog動作: リストボックスから項目を選択するためのダイアログを表示します。
引数:
master: 親ウィジェット。app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。varname: 未使用の引数。message(str, optional): ダイアログに表示するメッセージ。デフォルトは""。options(list, optional): リストボックスに表示する選択肢のリスト。デフォルトは[]。width(int, optional): リストボックスの幅。デフォルトは30。height(int, optional): リストボックスの高さ。デフォルトは5。def_index(int, optional): 初期選択する項目のインデックス。デフォルトはNone。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。
属性:
ret: 選択された項目。
メソッド:
body(master): ダイアログの本体(メッセージとスクロール付きリストボックス)を構築します。apply(): ダイアログが閉じられたときに、選択された項目をself.retに設定します。
class tkInputDialog(tkinter.simpledialog.Dialog)親クラス:
tkinter.simpledialog.Dialog動作: 複数行テキストを入力するためのダイアログを表示します。
引数:
master: 親ウィジェット。app: アプリケーションのルートオブジェクト。title(str, optional): ダイアログのタイトル。message(str, optional): ダイアログに表示するメッセージ。デフォルトは''。width(int, optional): テキスト入力エリアの幅。デフォルトは30。height(int, optional): テキスト入力エリアの高さ。デフォルトは10。def_val(str, optional): 初期入力テキスト。デフォルトは''。is_print(bool, optional): デバッグ情報を表示するかどうか。デフォルトはFalse。
属性:
ret: 入力されたテキスト。
メソッド:
body(master): ダイアログの本体(メッセージとテキスト入力エリア)を構築します。apply(): ダイアログが閉じられたときに、入力されたテキストをself.retに設定します。
数式例
インライン数式は $E=mc^2$ のように記述します。
ブロック数式は以下のように独立した行に記述し、その前後は必ず空行で挟んでください。
main scriptとして実行したときの動作
tktkinter.py には if __name__ == '__main__': ブロックが存在しないため、このファイルを直接Pythonスクリプトとして実行しても、特別な動作は行われません。ライブラリとして他のプログラムからインポートして使用することを想定しています。