酒店网站建设流程,网站使用说明书模板,品牌鞋子排行榜前十名,柚子网站建设今天笔者带大家#xff0c;梳理几个常见的基于文本终端的 UI 框架#xff0c;一睹为快#xff01; Curses
首先出场的是 Curses。 Curses 是一个能提供基于文本终端窗口功能的动态库#xff0c;它可以: 使用整个屏幕 创建和管理一个窗口 使用 8 种不同的彩色 为程序提供… 今天笔者带大家梳理几个常见的基于文本终端的 UI 框架一睹为快 Curses
首先出场的是 Curses。 Curses 是一个能提供基于文本终端窗口功能的动态库它可以: 使用整个屏幕 创建和管理一个窗口 使用 8 种不同的彩色 为程序提供鼠标支持 使用键盘上的功能键
Curses 可以在任何遵循 ANSI/POSIX 标准的 Unix/Linux 系统上运行。Windows 上也可以运行不过需要额外安装 windows-curses 库
pip install windows-curses上面图片就是一哥们用 Curses 写的 俄罗斯方块游戏是不感觉满满的回忆吧可以拿去复活古董机了。
我们也来试试牛刀
import cursesmyscreen 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
也是一个用了编写文本终端的 Python 组件库是基于 Curses 构建的应用框架。
比起 CursesNpyscreen 更接近 UI 式编程通过组件的组合完成 UI 展示和交互而且 Npyscreen 可以自适应屏幕变化。
Npyscreen 提供了多个控件比如 表单Form、单行文本输入框TitleText、日期控件TitleDateCombo、多行文本输入框MultiLineEdit、单选列表TitleSelectOne、进度条TitleSlider等多种控件。
提供强大的功能满足快速开发程序的要求无论是简单的单页程序还是复杂的多页应用。
来看一个小例子
import npyscreenclass 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, nameFilename2:)dt F.add(npyscreen.TitleDateCombo, name Date:)s F.add(npyscreen.TitleSlider, out_of12, name Slider)ml F.add(npyscreen.MultiLineEdit,value try typing here!\nMutiline text, press ^R to reformat.\n,max_height5, rely9)ms F.add(npyscreen.TitleSelectOne, max_height4, value [1,], namePick One,values [Option1,Option2,Option3], scroll_exitTrue)ms2 F.add(npyscreen.TitleMultiSelect, max_height -2, value [1,], namePick Several,values [Option1,Option2,Option3], scroll_exitTrue)# 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 来控制
是不是感觉很神奇用文本原来可以做这么多复杂的操作之前对命令行中的进度显示的疑惑是否有所清晰了 ~ Urwid
如果说 Curses 和 Npysreen 是轻量级的文本终端 UI 框架那么 Urwid 绝对称得上是重量级选手。
Urwid 包含了众多开发文本 UI 的特性例如 应用窗口自适应 文本自动对齐 轻松设置文本块 强大的选择框控件 可以和各种基于事件驱动的框架集成比如和 Twisted, Glib, Tornado等等 提供诸如编辑框、按钮、多(单)选框 等多种预制控件 显示模式支持原生、Curses模式、LCD 显示屏 以及 网络显示器 支持 UTF-8 以及 CJK 字符集可以显示中文 支持多种颜色
看看效果 不知道你看了是什么感觉我的感觉是这也太卷了吧~几乎可以做 GUI 下的所有事情更厉害的是Urwid 完全是按照面向对象的思想打造的框架 现在我们来小试一把感受一下 Urwid 的强大
import urwiddef show_or_exit(key):if key in (q, Q):raise urwid.ExitMainLoop()txt.set_text(repr(key))txt urwid.Text(uHello World)
fill urwid.Filler(txt, middle)
loop urwid.MainLoop(fill, unhandled_inputshow_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 早已不是主流但是在一些特殊的行业或者业务中还是有其存在的价值研究一下说不定在特殊的地方可以帮助到我们。 ---END---