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

本文介绍了Python中的Curses库,其轻量级但功能强大,适合简单交互;Npyscreen作为基于Curses的框架,提供组件化UI开发;而Urwid则是重量级的文本UI库,支持复杂功能和面向对象设计。作者强调了系统学习和社区支持对于技术提升的重要性。
摘要由CSDN通过智能技术生成

import curses

myscreen = curses.initscrmyscreen.border(0)

myscreen.addstr(12, 25, “Python curses in action!”)

myscreen.refreshmyscreen.getchcurses.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 时,退出主循环,否则将按键名称显示出来

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值