ホームページ >バックエンド開発 >Python チュートリアル >Python テキスト ターミナル GUI フレームワーク、とてもクール

Python テキスト ターミナル GUI フレームワーク、とてもクール

王林
王林転載
2023-04-12 12:52:081544ブラウズ

Curses

最初に登場するのはCurses[1]です。

Python テキスト ターミナル GUI フレームワーク、とてもクール

Curse

Curses は、テキストベースのターミナル ウィンドウ関数を提供する動的ライブラリです。画面全体

# ウィンドウの作成と管理
    # 8 つの異なる色を使用する
  • # プログラムにマウス サポートを提供する
  • # キーボードのファンクション キーを使用する
  • Curses は、ANSI/POSIX 標準に準拠する任意の Unix/Linux システム上で実行できます。 Windows でも実行できますが、Windows-curses ライブラリを追加でインストールする必要があります:
  • pip install windows-curses
    
  • 上の写真は、友人が Curses[2] を使って書いたテトリス ゲームです。思い出を持って行き、アンティークマシンを復活させましょう。
  • 私たちも最善を尽くしましょう:
  • import curses
    myscreen = curses.initscr()
    myscreen.border(0)
    myscreen.addstr(12, 25, "Python curses in action!")
    myscreen.refresh()
    myscreen.getch()
    curses.endwin()
    

addstr の最初の 2 つのパラメータはピクセル座標ではなく文字座標であることに注意してください。

getch はプログラムをブロックするまでプログラムをブロックします。キーボード入力を待機中です。

ウィンドウを終了するには、curses.endwin() を使用します。

    ユーザー操作を継続的に監視する必要がある場合は、ループを作成し、getch() によって取得された入力を判断する必要があります。
  • コード実行の効果は次のとおりです:#sho
  • #小刀
#Curses は非常に軽量で、単純な処理に特に適しています。インタラクションと複雑なパラメータ入力の置き換え このプログラムはエレガントかつシンプルで、Curses は他のテキスト ターミナル UI の基礎でもあります。

Npyscreen

Python テキスト ターミナル GUI フレームワーク、とてもクールNpyscreen[3] もテキスト端末を作成するための Python コンポーネント ライブラリであり、Curses に基づいて構築されたアプリケーション フレームワークです。

Curses と比較すると、Npyscreen は UI プログラミングに近く、コンポーネントの組み合わせによって UI の表示と操作が完了し、画面の変化にも対応できます。

Npyscreen は、フォーム (Form)、単一行テキスト入力ボックス (TitleText)、日付コントロール (TitleDateCombo)、複数行テキスト入力ボックス (MultiLineEdit)、ラジオ選択リスト (TitleSelectOne) などの複数のコントロールを提供します。 、プログレス バー (TitleSlider) およびその他のコントロール。

単純なシングルページ プログラムであっても、複雑なマルチページ アプリケーションであっても、迅速なプログラム開発の要件を満たす強力な機能を提供します。

小さな例を見てみましょう:

import npyscreen
class TestApp(npyscreen.NPSApp):
def main(self):
# These lines create the form and populate it with widgets.
# A fairly complex screen in only 8 or so lines of code - a line for each control.
F= npyscreen.Form(name = "Welcome to Npyscreen",)
t= F.add(npyscreen.TitleText, name = "Text:",)
fn = F.add(npyscreen.TitleFilename, name = "Filename:")
fn2 = F.add(npyscreen.TitleFilenameCombo, name="Filename2:")
dt = F.add(npyscreen.TitleDateCombo, name = "Date:")
s= F.add(npyscreen.TitleSlider, out_of=12, name = "Slider")
ml = F.add(npyscreen.MultiLineEdit,
 value = """try typing here!nMutiline text, press ^R to reformat.n""",
 max_height=5, rely=9)
ms = F.add(npyscreen.TitleSelectOne, max_height=4, value = [1,], name="Pick One",
values = ["Option1","Option2","Option3"], scroll_exit=True)
ms2= F.add(npyscreen.TitleMultiSelect, max_height =-2, value = [1,], name="Pick Several",
values = ["Option1","Option2","Option3"], scroll_exit=True)
# This lets the user interact with the Form.
F.edit()
print(ms.get_selected_objects())
if __name__ == "__main__":
App = TestApp()
App.run()

Npyscreen モジュールを導入します。そうでない場合は、pip を通じてインストールできます: pip install npyscreen

Inherit TestApp

main メソッドを実装し、メソッド内で Form オブジェクトを作成し、フォーム オブジェクトにさまざまなコントロールを追加し、コントロールのいくつかのプロパティを設定します

フォーム オブジェクトの Edit メソッドを呼び出して操作を実行します。権限はユーザーに与えられます。
  • 実行時に TestAPP をインスタンス化し、run メソッドを呼び出してアプリケーションを開始します。その後、アプリケーションは次の状態に入ることができますユーザー操作を待機しています
  • 上記のコードの効果は次のとおりです:
  • Npyscreen

[Tab ] / [Shift Tab] コントロールフォーカスの切り替えに使用します

[Enter] / [ Space] で選択、設定、確認を入力します Python テキスト ターミナル GUI フレームワーク、とてもクール

選択枠内では、方向キーも同様に動作しますvim[4]、つまり hjkl

    によって制御されるようにすると、魔法のように感じませんか? を実行すると、テキストを使用して非常に多くの複雑な操作を実行できることがわかります。コマンドラインでの表示がより明確になります~
  • Urwid
  • Curses と Npysreen が軽量のテキスト ターミナル UI フレームワークである場合、Urwid[5] は間違いなく重量級プレイヤーと言えます。
  • Urwid には、次のようなテキスト UI を開発するための多くの機能が含まれています。

アプリケーション ウィンドウの適応

自動テキスト配置

簡単に設定できるテキスト ブロック

強力な選択ボックス コントロール
    # Twisted[6]、Glib[7]、Tornado[8] などのさまざまなイベント駆動フレームワークと統合できます。
  • #エディット ボックス、ボタン、複数 (単一) 選択ボックスなどのさまざまな事前作成されたコントロールを提供します。
  • 表示モードはネイティブ、Curses モード、LCD ディスプレイ、およびネットワーク ディスプレイをサポートします
  • UTF- をサポートします。 8 CJK 文字セット (中国語を表示可能)
  • # 複数の色をサポート
  • #効果を確認:
  • #メッセージ ボックス
  • ##複数のフォント

Python テキスト ターミナル GUI フレームワーク、とてもクール

色彩

不知道你看了是什么感觉,我的感觉是:这也太卷了吧~

几乎可以做 GUI 下的所有事情!

更厉害的是,Urwid 完全是按照面向对象的思想打造的框架:

Python テキスト ターミナル GUI フレームワーク、とてもクール

Urwid 结构图

现在我们来小试一把,感受一下 Urwid 的强大:

import urwid
def show_or_exit(key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
txt.set_text(repr(key))
txt = urwid.Text(u"Hello World")
fill = urwid.Filler(txt, 'middle')
loop = urwid.MainLoop(fill, unhandled_input=show_or_exit)
loop.run()
  • 先引入 urwid 模块
  • 定义了一个输入事件处理方法 show_or_exit
  • 处理方法中,当输入按键是 q 或者 Q 时,退出主循环,否则将按键名称显示出来
  • urwid.Text 是一个文本控件,接受一个字符串作为显示信息
  • urwid.Filler 类似于 panel,将 txt 控件填充在上面,位置设置在窗口中央
  • urwid.MainLoop 设置 Urwid 的主循环,将 fill 作为控件的绘制入口,参数 unhandled_input 接受一个按键事件处理方法,用的就是前面定义的 show_or_exit
  • loop.run() 启动 UI,并监控各种事件

运行这段代码,就可以看到命令行被设置为交互模式,按键时会在窗口中央显示出键名,如果按下 q 键,程序就会退出。

注意:

Urwid 只能在 Linux 操作系统中运行,Windows 上会因为缺失必要组件无法运行

总结

限于篇幅,这里只展示了三种文本终端框架,不过已经能对基于文本终端 UI 框架的强大感受一二了。

还有一些框架也很优秀,比如 prompt_toolkit,有兴趣的同学可以研究一下。

虽然基于文本终端的 UI 早已不是主流,但是在一些特殊的行业或者业务中,还是有其存在的价值,研究一下,说不定在特殊的地方可以帮助到我们。

最后,推荐一个很有意思的基于文本终端的应用 —— 命令行网易云音乐[9]:

Python テキスト ターミナル GUI フレームワーク、とてもクール

NetEase-MusicBox

是基于 Curses 开发,如果运行起来,能被它的强悍所震撼,有空可以玩玩,比心!

以上がPython テキスト ターミナル GUI フレームワーク、とてもクールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。