成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 文本終端 GUI 框架,太酷了

開發 后端
今天筆者帶大家,梳理幾個常見的基于文本終端的 GUI 框架,一睹為快!

Curses

首先出場的是 Curses[1]。

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 前兩個參數是字符坐標,不是像素坐標
  • 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] 用于切換控件焦點
  • [回車] / [空格] 用于進入選擇、設置、確認
  • 在選擇框架中,方向鍵與 vim[4] 操作類似,即通過 hjkl 來控制

是不是感覺很神奇,用文本原來可以做這么多復雜的操作,之前對命令行中的進度顯示的疑惑是否有所清晰了~

Urwid

如果說 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 類似于 panel,將 txt 控件填充在上面,位置設置在窗口中央
  • urwid.MainLoop 設置 Urwid 的主循環,將 fill 作為控件的繪制入口,參數 unhandled_input 接受一個按鍵事件處理方法,用的就是前面定義的 show_or_exit
  • loop.run() 啟動 UI,并監控各種事件

運行這段代碼,就可以看到命令行被設置為交互模式,按鍵時會在窗口中央顯示出鍵名,如果按下 q 鍵,程序就會退出。

注意:

Urwid 只能在 Linux 操作系統中運行,Windows 上會因為缺失必要組件無法運行

總結

限于篇幅,這里只展示了三種文本終端框架,不過已經能對基于文本終端 UI 框架的強大感受一二了。

還有一些框架也很優秀,比如 prompt_toolkit,有興趣的同學可以研究一下。

雖然基于文本終端的 UI 早已不是主流,但是在一些特殊的行業或者業務中,還是有其存在的價值,研究一下,說不定在特殊的地方可以幫助到我們。

最后,推薦一個很有意思的基于文本終端的應用 —— 命令行網易云音樂[9]:

NetEase-MusicBox

是基于 Curses 開發,如果運行起來,能被它的強悍所震撼,有空可以玩玩,比心!

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2022-10-10 13:51:19

開源工具

2024-02-19 07:42:41

pythonAndroid

2022-07-29 14:11:51

前端瀏覽器

2017-05-16 12:42:12

服務器

2022-05-16 09:34:17

Python可視化圖表

2021-06-24 13:00:35

微軟開源可視化

2016-05-25 10:22:22

開源PythonGUI

2021-06-21 10:10:57

Python命令行可視化

2016-07-27 15:24:35

GUILinux終端

2023-11-03 12:56:47

PythonGUI

2024-05-10 13:53:25

人工智能AI大模型

2016-11-23 16:22:43

LinuxLinux shell

2011-09-22 13:56:56

2024-10-21 09:07:52

2023-11-23 13:10:24

Python框架

2024-07-16 13:09:29

2021-02-23 12:30:21

VS CodeGithub代碼

2018-09-26 14:50:36

PythonGUI開源

2020-06-07 16:07:57

Python開發工具

2024-01-06 17:53:11

前端框架方案
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线中文 | 黄色在线免费网站 | 欧美日韩在线一区二区三区 | 乱码av午夜噜噜噜噜动漫 | 一级免费毛片 | 亚洲精品九九 | 久久精品—区二区三区 | 在线一区二区三区 | 91精品久久久久久久久中文字幕 | 亚洲精品一区二区三区四区高清 | 精品麻豆剧传媒av国产九九九 | 国产免费av在线 | 看a网站| 国产成人精品久久二区二区91 | 爱综合| 成人av一区二区亚洲精 | 欧美激情亚洲 | 大陆一级毛片免费视频观看 | 一区二区三区电影网 | 欧美视频一区二区三区 | 不卡的av在线 | 国产精品久久久久9999鸭 | 婷婷久久网 | 翔田千里一区二区 | 日韩精品一区二区三区中文在线 | 免费在线观看成人 | 91精品久久久久久久久中文字幕 | 亚洲精品电影在线观看 | 亚洲三区在线观看 | 亚洲精品888 | 中文字幕亚洲欧美 | 瑞克和莫蒂第五季在线观看 | 免费精品视频在线观看 | 国产伊人久久久 | 99亚洲精品 | 亚洲免费一 | 国产一级毛片视频 | 亚洲网站在线观看 | 欧美一级三级在线观看 | 欧美日韩中 | 日韩精品二区 |