最近、テキスト端末に基づくいくつかの興味深いUIフレームワークを見てきました。また、コマンドラインのNetEaseCloudMusicを作成することもできます。この記事が気に入ったら、ブックマーク、いいね、フォローすることを忘れないでください。
レース
最初にプレイするのはCurses[1]です。
呪い
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()
を判断する必要があります
コードは次のように実行されます。
小規模チョッパー
Cursesは非常に軽量で、特に単純な対話に適しており、複雑なパラメータ入力プログラムに取って代わります。エレガントでシンプルであり、Cursesは他のテキスト端末UIの基盤でもあります。
Npyscreen
Npyscreen [3]は、テキスト端末を作成するためのPythonコンポーネントライブラリでもあり、Curses上に構築されたアプリケーションフレームワークです。
Cursesと比較すると、NpyscreenはUIスタイルのプログラミングに近く、UIの表示と操作はコンポーネントの組み合わせによって完了し、Npyscreenは画面の変更に適応できます。
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
-
継承アプリケーションクラスを
npyscreen.NPSApp
作成するTestApp
-
メソッドを実装し、
main
メソッドにForm
フォームオブジェクトを作成してから、フォームオブジェクトにさまざまなコントロールを追加し、コントロールのいくつかのプロパティを設定します -
フォームオブジェクトの
Edit
メソッドユーザーに操作権を与えます -
実行時に、インスタンス化してからメソッドを呼び出してアプリケーションを
TestAPP
起動すると、アプリケーションはユーザーの操作を待機している状態になります。run
上記のコードを実行した場合の効果は次のとおりです。
Npyscreen
-
[Tab] / [Shift+Tab]はコントロールフォーカスを切り替えるために使用されます
-
[Enter] / [Space]は、選択、設定、確認を入力するために使用されます
-
選択フレームでは、矢印キーはvim [4]の操作に似ています。つまり、hjklによって制御されます。
テキストを使って非常に多くの複雑な操作を実行できるのは驚くべきことではありませんか?コマンドラインでの進行状況の表示についての疑問は明らかですか?
ウルウィド
CursesとNpysreenが軽量のテキストターミナルUIフレームワークである場合、Urwid[5]は間違いなく重量級です。
Urwidには、テキストUIを開発するための多くの機能が含まれています。
-
アプリウィンドウの適応
-
テキストの自動整列
-
テキストブロックを簡単に設定
-
強力な選択ボックスコントロール
-
Twisted [6]、Glib [7]、Tornado[8]などのさまざまなイベント駆動型フレームワークと統合できます。
-
編集ボックス、ボタン、複数の(単一の)チェックボックスなど、さまざまな既成のコントロールを提供します。
-
ディスプレイモードは、ネイティブ、Cursesモード、LCDディスプレイ、およびネットワークディスプレイをサポートします
-
UTF-8およびCJK文字セットをサポート(中国語を表示できます)
-
複数の色をサポート
効果を見てみましょう:
メッセージボックス
複数のフォント
色
見たときの気持ちがわかりませんが、巻きすぎです〜
GUIの下でほとんどすべてを行うことができます!
さらに、Urwidは、完全にオブジェクト指向の考え方に従って構築されたフレームワークです。
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
パネルと同様に、その上にtxtコントロールを入力し、ウィンドウの中央に位置を設定します -
urwid.MainLoop
Urwidのメインループを設定し、コントロールの描画エントリとしてfillを使用すると、パラメーターは上記で定義されたボタンイベント処理メソッドunhandled_input
を受け入れます。show_or_exit
-
loop.run()
UIを起動し、さまざまなイベントを監視します
このコードを実行すると、コマンドラインがインタラクティブモードに設定されていることがわかります。キーを押すとウィンドウの中央にキー名が表示され、qキーを押すとプログラムが終了します。
注:
UrwidはLinuxオペレーティングシステムでのみ実行できます。必要なコンポーネントが不足しているため、Windowsでは動作しません。
要約する
スペースの制限により、ここでは3つのテキスト端末フレームワークのみを示していますが、テキスト端末に基づく強力なUIフレームワークについてはもう少し感じられます。
また、prompt_toolkitなど、興味のある学生が学習できる優れたフレームワークもいくつかあります。
テキスト端末をベースにしたUIはもはや主流ではありませんが、一部の特殊産業やビジネスでは依然としてその価値があります。それを研究してください。特別な場所で役立つかもしれません。
最後に、非常に興味深いテキスト端末ベースのアプリケーションをお勧めします-コマンドラインNetEase Cloud Music [9]:
NetEase-MusicBox
呪いをベースに開発されており、走らせるとその強さにショックを受け、時間があるときに遊べます。
おすすめ記事
テクノロジーエクスチェンジ
転載、収集、いいね、サポートへようこそ!
現在、 2,000人以上のメンバーで構成される技術交流グループが開設されています。追加する際の最良のコメント方法は、ソース+関心の方向性です。これは、志を同じくする友人を見つけるのに便利です。
- 方法1.次の画像をWeChatに送信し、長押しして識別し、バックグラウンドで返信します。グループを追加します。
- 方法②、マイクロ信号を追加:dkl88191、注:CSDNから
- 方法③、WeChat検索パブリックアカウント:Python学習とデータマイニング、バックグラウンド応答:グループを追加