點選上方 "
Python人工智慧技術
"
關註,
星標或者置頂
22點24分準時推播,第一時間送達
後台回復「
大禮包
」,送你特別福利
編輯:樂樂 | 來自:網路
上一篇:
大家好,我是Python人工智慧技術
今天梳理幾個常見的基於文本終端的 UI 框架,一睹為快!
1
Curses
首先出場的是 Curses。
Curses 是一個能提供基於文本終端視窗功能的動態庫,它可以:
使用整個螢幕
建立和管理一個視窗
使用 8 種不同的彩色
為程式提供滑鼠支持
使用鍵盤上的功能鍵
Curses 可以在任何遵循 ANSI/POSIX 標準的 Unix/Linux 系統上執行。Windows 上也可以執行,不過需要額外安裝 windows-curses 庫:
pip install windows-curses
上面圖片,就是一哥們用 Curses 寫的 俄羅斯方塊遊戲,是不感覺滿滿的回憶吧,可以拿去復活古董機了。
我們也來試試牛刀:
import curses
myscreen = curses.initscr()
myscreen.border(0)
myscreen.addstr(12, 25, "Python curses in action!")
myscreen.refresh()
myscreen.getch()
curses.endwin()
需要註意 addstr 前兩個參數是字元座標,不是像素座標
getch 會阻塞程式,直到等待鍵盤輸入
curses.endwin() 作用是結束視窗
如果需要持續監聽使用者的互動,需要寫個迴圈,並對 getch() 獲得的輸入進行判斷
程式碼執行效果如下:
Curses 非常輕巧,特別適合處理一下簡單互動,代替復雜參數輸入的程式,既優雅,有簡單,而且 Curses 也是其他文字終端 UI 的基礎。Npyscreen
2
Npyscreen
也是一個用了編寫文本終端的 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 方法啟動套用,套用即可進入等待使用者互動的狀態
上面程式碼執行的效果如下:
[Tab] / [Shift + Tab] 用於切換控制項焦點
[回車] / [空格] 用於進入選擇、設定、確認
在選擇框架中,方向鍵與 vim[4] 操作類似,即透過 hjkl 來控制
是不是感覺很神奇,用文本原來可以做這麽多復雜的操作,之前對命令列中的進度顯示的疑惑是否有所清晰了 ~
3
Ur wid
如果說 Curses 和 Npysreen 是輕量級的文本終端 UI 框架,那麽 Urwid 絕對稱得上是重量級選手。
Urwid 包含了眾多開發文本 UI 的特性,例如:
套用視窗自適應
文本自動對齊
輕松設定文本塊
強大的選擇框控制項
可以和各種基於事件驅動的框架整合,比如和 Twisted, Glib, Tornado等等
另外,搜尋公眾號Linux就該這樣學後台回復「猴子」,獲取一份驚喜禮包。
提供諸如編輯框、按鈕、多(單)選框 等多種預制控制項
顯示模式支持原生、Curses模式、LCD 顯示器 以及 網路顯視器
支持 UTF-8 以及 CJK 字元集(可以顯示中文)
支持多種顏色
看看效果:
不知道你看了是什麽感覺,我的感覺是:這也太卷了吧~
幾乎可以做 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 上會因為缺失必要元件無法執行
4
總結
限於篇幅,這裏只展示了三種文本終端框架,不過已經能對基於文本終端 UI 框架的強大感受一二了。
還有一些框架也很優秀,比如 prompt_toolkit,有興趣的同學可以研究一下。
雖然基於文本終端的 UI 早已不是主流,但是在一些特殊的行業或者業務中,還是有其存在的價值,研究一下,說不定在特殊的地方可以幫助到我們。
最後,推薦一個很有意思的基於文本終端的套用 —— 命令列網易雲音樂:
是基於 Curses 開發,如果執行起來,能被它的強悍所震撼,有空可以玩玩,比心!
為了跟上AI時代我幹了一件事兒,我建立了一個知識星球社群:ChartGPT與副業。想帶著大家一起探索 ChatGPT和新的AI時代 。
有很多小夥伴搞不定ChatGPT帳號,於是我們決定,凡是這三天之內加入ChatPGT的小夥伴,我們直接送一個正常可用的永久ChatGPT獨立帳戶。
不光是增長速度最快,我們的星球品質也絕對經得起考驗,短短一個月時間,我們的課程團隊釋出了 8個專欄、18個副業計畫 :
簡單說下這個星球能給大家提供什麽:
1、不斷分享如何使用ChatGPT來完成各種任務,讓你更高效地使用ChatGPT,以及副業思考、變現思路、創業案例、落地案例分享。
2、分享ChatGPT的使用方法、最新資訊、商業價值。
3、探討未來關於ChatGPT的機遇,共同成長。
4、幫助大家解決ChatGPT遇到的問題。
5、 提供一整年的售後服務,一起搞副業
星球福利:
1、加入星球4天後,就送ChatGPT獨立帳號。
2、邀請你加入ChatGPT會員交流群。
3、贈送一份完整的ChatGPT手冊和66個ChatGPT副業賺錢手冊。
其它福利還在籌劃中... 不過,我給你大家保證,加入星球後,收獲的價值會遠遠大於今天加入的門票費用 !
本星球第一期原價 399 ,目前屬於試營運,早鳥價 169 ,每超過50人漲價10元,星球馬上要來一波大的漲價,如果你還在猶豫,可能最後就要以 更高價格加入了 。。
早就是優勢。建議大家盡早以便宜的價格加入!
歡迎有需要的同學試試,如果本文對您有幫助,也請幫忙點個 贊 + 在看 啦!❤️
在 還有更多優質計畫系統學習資源,歡迎分享給其他同學吧!
你還有什
麽想要補充的嗎?
免責聲明:本文內容來源於網路,文章版權歸原作者所有,意在傳播相關技術知識&行業趨勢,供大家學習交流,若涉及作品版權問題,請聯系刪除或授權事宜。
技術君個人微信
添加技術君個人微信即送一份驚喜大禮包
→ 技術資料共享
→ 技術交流社群
--END--
往日熱文:
Python程式設計師深度學習的「四大名著」:
這四本書著實很不錯!我們都知道現在機器學習、深度學習的資料太多了,面對海量資源,往往陷入到「無從下手」的困惑出境。而且並非所有的書籍都是優質資源,浪費大量的時間是得不償失的。給大家推薦這幾本好書並做簡單介紹。
獲得方式:
1.掃碼關註本公眾號
2.後台回復關鍵詞:名著
▲長按掃描關註,回復名著即可獲取