PyTermGUI
Pythonの軽量で高性能なTUIライブラリ。YAMLベースの設定、カスタマイズ可能なテーマ、豊富なウィジェットを提供します。
GitHub概要
bczsalba/pytermgui
Python TUI framework with mouse support, modular widget system, customizable and rapid terminal markup language and more!
スター2,478
ウォッチ19
フォーク62
作成日:2021年3月31日
言語:Python
ライセンス:MIT License
トピックス
ansiansi-escape-codesansi-escape-sequencesclicommand-lineconsolecross-platformguipytermguipythonpython3terminaltuityping
スター履歴
データ取得日時: 2025/7/25 06:23
PyTermGUI
PyTermGUIは、Pythonで軽量かつ高性能なTUIアプリケーションを構築するためのライブラリです。YAMLベースの設定システムとカスタマイズ可能なテーマエンジンを特徴とし、豊富なウィジェットセットを提供します。
主な特徴
YAMLベース設定
- 設定管理: アプリケーションの設定をYAMLファイルで管理
- テーマシステム: 色やスタイルをYAMLで定義可能
- 柔軟な構成: 複雑なレイアウトも設定ファイルで表現
豊富なウィジェット
- 基本ウィジェット: ボタン、ラベル、入力フィールド
- レイアウト: コンテナ、スプリッター、タブ
- 高度なコンポーネント: メニュー、ダイアログ、プログレスバー
高性能
- 最適化されたレンダリング: 効率的な画面更新
- メモリ効率: 軽量なメモリフットプリント
- 応答性: スムーズなユーザーインタラクション
インストール
pip install pytermgui
基本的な使用方法
シンプルなアプリケーション
import pytermgui as ptg
def main():
with ptg.WindowManager() as manager:
window = ptg.Window(
"Hello PyTermGUI!",
ptg.Button("Click me!", lambda *_: print("Button clicked!")),
ptg.Button("Quit", lambda *_: manager.stop()),
)
manager.add(window)
if __name__ == "__main__":
main()
ウィジェットの活用
import pytermgui as ptg
def create_form():
# 入力フォームの作成
form = ptg.Container(
ptg.Label("User Information"),
ptg.InputField(prompt="Name: "),
ptg.InputField(prompt="Email: "),
ptg.Button("Submit", on_click=submit_form),
)
return form
def submit_form(button):
# フォーム送信処理
print("Form submitted!")
with ptg.WindowManager() as manager:
window = ptg.Window(create_form())
manager.add(window)
YAMLテーマ設定
# theme.yaml
colors:
primary: "#3498db"
secondary: "#2ecc71"
background: "#2c3e50"
text: "#ffffff"
widgets:
Button:
background: primary
foreground: text
border: "single"
InputField:
background: background
foreground: text
border: "double"
import pytermgui as ptg
# テーマの読み込み
ptg.load_theme("theme.yaml")
# アプリケーションの起動
with ptg.WindowManager() as manager:
# テーマが適用されたウィジェット
window = ptg.Window(
ptg.Button("Themed Button"),
ptg.InputField(prompt="Themed Input: "),
)
manager.add(window)
高度な機能
カスタムウィジェット
import pytermgui as ptg
class CounterWidget(ptg.Widget):
def __init__(self, initial_value=0):
super().__init__()
self.count = initial_value
self.label = ptg.Label(f"Count: {self.count}")
self.inc_button = ptg.Button("+", self.increment)
self.dec_button = ptg.Button("-", self.decrement)
self.container = ptg.Container(
self.label,
ptg.Container(self.dec_button, self.inc_button),
)
def increment(self, *_):
self.count += 1
self.label.value = f"Count: {self.count}"
def decrement(self, *_):
self.count -= 1
self.label.value = f"Count: {self.count}"
レイアウト管理
import pytermgui as ptg
def create_layout():
# 分割レイアウト
splitter = ptg.Splitter(
ptg.Container(
ptg.Label("Left Panel"),
ptg.Button("Button 1"),
ptg.Button("Button 2"),
),
ptg.Container(
ptg.Label("Right Panel"),
ptg.InputField(prompt="Input: "),
ptg.TextArea(placeholder="Text area..."),
),
)
return splitter
with ptg.WindowManager() as manager:
window = ptg.Window(create_layout())
manager.add(window)
他のライブラリとの比較
特徴 | PyTermGUI | Textual | Urwid |
---|---|---|---|
設定方式 | YAML | Python | Python |
テーマ | 豊富 | CSS風 | 制限的 |
パフォーマンス | 高 | 高 | 中 |
学習コスト | 低 | 中 | 高 |
ドキュメント | 良好 | 優秀 | 充実 |
使用事例
- 設定ツール: システム管理用のTUIツール
- 開発ツール: プロジェクト管理や監視ツール
- データ入力: フォームベースのアプリケーション
- ゲーム: シンプルなターミナルゲーム
コミュニティとサポート
- GitHub: アクティブな開発とイシュー管理
- ドキュメント: 充実したAPIリファレンス
- 例題: 豊富なサンプルコード
- コミュニティ: 活発なディスカッション
PyTermGUIは、現代的なアプローチでTUIアプリケーション開発を簡素化し、高性能と使いやすさを両立したライブラリです。