PyTermGUI

Pythonの軽量で高性能なTUIライブラリ。YAMLベースの設定、カスタマイズ可能なテーマ、豊富なウィジェットを提供します。

TUITerminalGUIWidgetsYAMLTheme

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

スター履歴

bczsalba/pytermgui Star History
データ取得日時: 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)

他のライブラリとの比較

特徴PyTermGUITextualUrwid
設定方式YAMLPythonPython
テーマ豊富CSS風制限的
パフォーマンス
学習コスト
ドキュメント良好優秀充実

使用事例

  • 設定ツール: システム管理用のTUIツール
  • 開発ツール: プロジェクト管理や監視ツール
  • データ入力: フォームベースのアプリケーション
  • ゲーム: シンプルなターミナルゲーム

コミュニティとサポート

  • GitHub: アクティブな開発とイシュー管理
  • ドキュメント: 充実したAPIリファレンス
  • 例題: 豊富なサンプルコード
  • コミュニティ: 活発なディスカッション

PyTermGUIは、現代的なアプローチでTUIアプリケーション開発を簡素化し、高性能と使いやすさを両立したライブラリです。