泰酷辣!Python文本终端GUI框架!

TerminalUI:基于urwid的Python终端用户界面,具有异步输入输出,可以轻松扩展到您的应用程序 TerminalUI 一个Python程序包,可轻松开发需要异步读取/写入的终端用户界面。 功能包括: 用于处理用户按键的TerminalUI类,只需将您输入的命令函数传递给它即可 异步读/写功能 可配置选项面板,用于在运行时配置应用程序 选项可以是可选值列表或可编辑值 其他几个功能 该软件包基于。 不幸的是,这意味着基于当前如何实现TerminalUI类,它在Windows上将无法使用。 但是,它将与Windows Linux子系统(WSL)一起使用。 这是有关如何在Windows 10上启用WSL的。 安装 通过pip安装 pip3 install terminalui 从源代码安装(使用符号链接,以便对源代码的更新会立即反映在使用TerminalUI的软件包中) git clone https://github.com/jmount1992/TerminalUI.git pyt 立即下载

转自:python专栏

👇我的小册 40章+教程:(小白零基础用Python量化股票分析小册) ,目前已经300多人订阅

今天梳理几个常见的基于文本终端的 UI 框架,一睹为快!

1

Curses

首先出场的是 Curses。

a765fbbfa6505d29392b5736d44015f8.png

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() 获得的输入进行判断

代码运行效果如下:

36ef1b50a2929df040083216db8ddcc8.png

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 方法启动应用,应用即可进入等待用户交互的状态

上面代码运行的效果如下:

b75bacb49a80a7ea54c2d122aa0e84ba.png

  • [Tab] / [Shift + Tab] 用于切换控件焦点

  • [回车] / [空格] 用于进入选择、设置、确认

  • 在选择框架中,方向键与 vim[4] 操作类似,即通过 hjkl 来控制

是不是感觉很神奇,用文本原来可以做这么多复杂的操作,之前对命令行中的进度显示的疑惑是否有所清晰了 ~

3

Urwid

如果说 Curses 和 Npysreen 是轻量级的文本终端 UI 框架,那么 Urwid 绝对称得上是重量级选手。

Urwid 包含了众多开发文本 UI 的特性,例如:

  • 应用窗口自适应

  • 文本自动对齐

  • 轻松设置文本块

  • 强大的选择框控件

  • 可以和各种基于事件驱动的框架集成,比如和 Twisted, Glib, Tornado等等

  • 提供诸如编辑框、按钮、多(单)选框 等多种预制控件

  • 显示模式支持原生、Curses模式、LCD 显示屏 以及 网络显示器

  • 支持 UTF-8 以及 CJK 字符集(可以显示中文)

  • 支持多种颜色

看看效果:

b9ffa45589fcb015a9674f4a9bf158d9.png

962270d59723701b7a4068e9d7e2734b.png

97e833a6b1bc4288fd041b385c14331e.png

不知道你看了是什么感觉,我的感觉是:这也太卷了吧~

几乎可以做 GUI 下的所有事情!

更厉害的是,Urwid 完全是按照面向对象的思想打造的框架:

a8d4a8d6dd6ed808a720c2818ca6c6e9.png

现在我们来小试一把,感受一下 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 早已不是主流,但是在一些特殊的行业或者业务中,还是有其存在的价值,研究一下,说不定在特殊的地方可以帮助到我们。

最后,推荐一个很有意思的基于文本终端的应用 —— 命令行网易云音乐:

8940a37b983709cca16d8a6ba32d30aa.gif

是基于 Curses 开发,如果运行起来,能被它的强悍所震撼,有空可以玩玩,比心!

691af6ae7d79a12811ec2436ef7fff3a.jpeg

最后推荐一下我们团队写的量化小册的内容,45篇内容!从Python安装,入门,数据分析,爬取股票基金的历史+实时数据,以及如何写一个简单量化策略,策略回测,如何看资金曲线统统都有介绍!非常超值!

欢迎订阅:原价199 早鸟价2杯咖啡钱,即可永久阅读。现在的价格非常非常低,只要2杯奶茶,就可以终身订阅+课程源码,还有永久陪伴群。48小时无理由退款,放心食用!

984666dc83479143d3fef03a710b411d.png

推荐阅读:
量化: 如何用Python爬取创业板历史+实时股票数据!|实战股票分析篇利用Pandas 9招挖掘五粮液股价!|实战股票数据分析篇 Pandas滚动操作 |量化股票第一步,用Python画股票K线,双均线图,可视化你的股票数据!|如何用Python爬取全部800多只ETF基金数据!|如何用Python写一个双均线策略 |如何用Python开发一个多策略机器人!上篇!|Python量化系列-用布林策略买五粮液能赚多少钱?|只要4秒钟!用Python 获取上证指数34年的历史日线数据!
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

Python-stui允许从终端以图形方式监控CPU温度频率功率和利用率 s-tui是用于监控计算机的终端UI。 s-tui允许从终端以图形方式监控CPU温度,频率,功率和利用率。 立即下载

相关推荐

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1514

爱上PyCharm全新UI的五个理由!让Python开发更个性化

本文将进一步为大家介绍PyCharm在v2023.1版本中发布的全新UI,欢迎下载最新版IDE体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 3310

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

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

编辑:乐乐 | 来自:网络正文今天笔者带大家,梳理几个常见的基于文本终端的 UI 框架,一睹为快!Curses首先出场的是Curses[1]。CurseCurses 是一个能提供基于文本...

小詹学python的博客 621

集成学习之GBDT

GBDT

joejoeqian的博客 1257

带你了解如何分析Jmeter监听器常用图表并定位瓶颈

1.1 Jmeter监听器常用图表 目录 1.1 Jmeter监听器常用图表 1.1-1 查看结果树 1.1-2 汇总报告 1.1-3 集合报告 1.1-4 综合图 1.1-5 断言结果 1.1-6 图形结果 1.1-7 响应时间图 1.2 Jmeter性能瓶颈定位 1.2-1 性能瓶颈产生的原因 1.2-2 性能瓶颈的解决方法 1.2-3 性能瓶颈如何定位 1.1-1 查看结果树 查看结果树:调试利器。可以查看每个请求具体的详情,方便进行测试的比对。有点类似我...

weixin_49029722的博客 4450

保姆级别操作指导,教你用Python快速开发UI应用!

正式的Python专栏第5篇,同学站住,别错过这个从0开始的文章! 之前 你不知道Python多能干 ,秒懂精通pip并快速体验深度学习应用和 多图展示学会Python基础上篇 等,这次我们来看看使用Python 开发一个简单的UI应用吧。 我们要做一个窗口,然后放两个按钮,提示不同消息。 就做这个简单功能。 先介绍一个UI库 The tkinter package (“Tk interface”) 是一个基于Tcl/Tk GUI工具标准的Python接口。集合在大多数操作系统都有Tk和tkinter .

持续学习持续开发,我是雷学委! 5548

LabVIEW+数据库应用系列保姆级教程,第二篇增删查改

2021-7-2 先挖好坑

wwplh5520370的博客 7364

Python Pyqt5入门

用PyQt5将输出结果进行渲染展示

weixin_68378208的博客 5438

11、气动外形优化中的连续伴随方法

本文探讨了连续伴随方法在气动外形优化中的理论背景、实现和验证过程。通过使用DLR的FLOWer求解器,将伴随方法应用于Euler和Navier-Stokes方程,以高效计算成本函数梯度,从而显著减少优化过程中的计算成本。文章还介绍了该方法在RAE2822翼型和ONERA M6机翼等案例中的应用,并展示了其准确性和效率。未来展望包括扩展到复杂流动模拟和多学科优化。

desk3的博客 167

X86/64架构中的总线 和 ARM架构中总线的理解

内部总线 /CPU总线/FSB前端总线:类似ARM架构中的AHB总线北桥? 直接和CPU连接,这条总线主要由CPU使用,用来与高速缓存、主存和北桥(或MCH)之间传送信息。 外部总线:类似ARM架构中的APB总线(外围总线)南桥?例如PCI总线、USB总线等 通过北桥与CPU连接(南桥?),是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路 内存总线:内存与北桥间的总线称为内存总线 ...

a746742897的博客 1067

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

Curses 可以在任何遵循 ANSI/POSIX 标准的 Unix/Linux 系统上运行。上面图片,就是一哥们用 Curses 写的 俄罗斯方块游戏,是不感觉满满的回忆吧,可以拿去复活古董机了。代码运行效果如下:Curses 非常轻巧,特别适合处理一下简单交互,代替复杂参数输入的程序,既优雅,有简单,而且 Curses 也是其他文字终端 UI 的基础。Npyscreen。

2401_86454776的博客 551

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python图形化界面开发工具,python图形界面设计工具

wxPython是一个用C ++编写的适用于Python的跨平台GUI工具包,它让Python程序员们能够简单、轻松地创建功能强大的图形用户界面的程序。它目前支持的平台包括Microsoft Windows、Mac OS X和macOS,以及Linux或其他具有GTK2或GTK3库的类unix系统。

jaskonyee的博客 1600

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python 文本终端 GUI 框架详解

本文介绍了几个Python文本终端GUI框架,包括Blessed、Textual、npyscreen、Rich、Urwid、Prompt-Toolkit和PyInquirer。每个框架都有其独特的功能和特点,适用于不同类型的命令行界面应用程序。这些示例代码展示了各个框架的基本用法,你可以根据自己的需求选择合适的框架开始开发交互式的命令行应用程序。

aobulaien001的博客 1297

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[1337]python文本终端GUI框架Textual

Textual是一个用于 Python 的 TUI(文本用户界面)库,是 Rich 的姐妹项目,也依赖于 Rich。它支持 Rich 的 Renderable 类,同时有自己的互动性组件 Widget 类。通过使用简单的 Python API 构建复杂的用户界面,在shell工具或浏览器上运行。官方文档提供了详尽的入门指南和教程,即使是从未接触过Textual的开发者也能快速上手,轻松构建自己的第一个Textual应用。(需要安装uv) 来运行演示程序,快速感受Textual 的魅力。

周小董 1176

Rich终极指南:掌握Python终端UI库的未来发展趋势

想要让枯燥的命令行界面变得生动有趣吗?Rich库正是你需要的终极解决方案!作为Python生态中最强大的终端美化工具,Rich通过丰富的颜色、表格、进度条和语法高亮,彻底改变了传统控制台输出的单调面貌。这篇完整指南将带你深入了解Rich库的核心功能,并探索其未来发展方向。 ## 🎨 为什么Rich是终端美化的革命性工具 Rich库不仅仅是一个简单的颜色输出工具,它实现了**完整的终端富文本渲

gitblog_00272的博客 1163

python ui界面设计(二)

以加减乘除为例子,使用pycharm 1.设计界面 设计首页 点击tools->External Tools->Qt Designer,添加四个按钮,分别为页面1,页面2,页面3,页面4,保存为shouye.ui 在终端使用pyuic5 -o shouye.py shouye.ui -x将ui文件转为.py文件 页面1 实现两个数相加,数字1和数字2为label,数字输入框为LineEdit,结果为PushButton,结果输出框为TextEdit。 添加链接关系: 在setup

fyflalala的博客 1万+

python 命令行UI库---DUI

刚刚学习Linux时,看着一行行命令着实令人脑胀。后来发现了Vim这个神奇的东西,界面如此超凡脱俗。于是我打算写一个库,基本功能就是让程序都能像Windows一样拥有自己的窗口。 未完待续......

Lettle's blog 769

手把手教你用Python设计一个简单的命令行界面

对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰。今天,我们就来教大家如何设计功能完整的 Python 命令行界面。 对 Python 开发者来说用的最多的界面恐怕还是命令行。就拿我参与的机器学习项目来说,训练模型和评估算法的精确度都是通过在命令行界面运行脚本来完成的。 所以调用一个 Python 脚本的时候我们希望这段脚本有一个尽量简洁方便调用的接...

python学习者的博客 7589

terminal-layout -- 命令行 UI 布局工具

原文链接:https://www.ikaze.cn/article/37 terminal-layout是一个命令行UI布局工具,帮助你告别单调的命令行输出,让输出富有色彩。 相关连接 文档 效果展示 GitHub Gitee ...

五十风的专栏 1148
上一篇: 成年人快感程度排行榜TOP20(漫画)
下一篇: 永不裁员的谷歌,开始让员工提前毕业!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值