首先出场的是 Curses[1]。
Curse
Curses 是一个能提供基于文本终端窗口功能的动态库,它可以:
Curses 可以在任何遵循 ANSI/POSIX 标准的 Unix/Linux 系统上运行。Windows 上也可以运行,不过需要额外安装 windows-curses 库:
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()
运行这段代码,就可以看到命令行被设置为交互模式,按键时会在窗口中央显示出键名,如果按下 q 键,程序就会退出。
注意:
Urwid 只能在 Linux 操作系统中运行,Windows 上会因为缺失必要组件无法运行
限于篇幅,这里只展示了三种文本终端框架,不过已经能对基于文本终端 UI 框架的强大感受一二了。
还有一些框架也很优秀,比如 prompt_toolkit,有兴趣的同学可以研究一下。
虽然基于文本终端的 UI 早已不是主流,但是在一些特殊的行业或者业务中,还是有其存在的价值,研究一下,说不定在特殊的地方可以帮助到我们。
最后,推荐一个很有意思的基于文本终端的应用 —— 命令行网易云音乐[9]:
NetEase-MusicBox
是基于 Curses 开发,如果运行起来,能被它的强悍所震撼,有空可以玩玩,比心!
在使用Python和Selenium进行网页爬虫时,多线程并发执行偶尔报错而单线程却没有问题,这种现象通常是由以下几个原因导致的:浏览器实例共享问题: Selenium在多线程环境下,如果多个线程试图同时操作同一个浏览器实例,可能会导致冲突。每个线程应该使用独立的浏览器实例,但如果没有正确管理,可能会出现浏览器实例被多个线程共享的情况,从而引发异常。解决方案:确保每个线程都有自己的浏览器实例。例如,可以在每个线程中创建和管理自己的浏览器实例。from selenium import webdriver i
Pydantic BaseModel默认值:列表共享的坑与解决方法
如何使用 Python 检索 Github 存储库数据
PyPy内存消耗高是哪些因素导致的?
MySQL、PostgreSQL、SQL Server和Oracle中空字符串、数字0和NULL占用空间有何区别
父进程终止后如何定位其启动的子进程?