有读者问:有没有基于文本终端的GUI开发框架?今天笔者就带大家梳理几款常见的基于文本终端的UI框架,一起来看看吧!诅咒首先是诅咒。CurseCurses是一个为基于文本的终端窗口提供功能的动态库。它可以:使用整个屏幕来创建和管理窗口使用8种不同的颜色来为程序提供鼠标支持使用键盘上的功能键Curses可以在任何ANSI/运行于POSIX兼容的Unix/Linux系统中使用。Windows也可以运行,但是需要额外安装windows-curses库:pipinstallwindows-curses上图是小伙伴用Curses写的俄罗斯方块游戏。是不是满满的回忆呢?可以用来复活古董机。我们也来试试:importcursesmyscreen=curses.initscr()myscreen.border(0)myscreen.addstr(12,25,"Pythoncursesinaction!")myscreen.refresh()myscreen.getch()curses.endwin()需要注意的是addstr的前两个参数是字符坐标,不是像素坐标。getch将阻塞程序,直到它等待键盘输入。()对获取的输入进行判断,代码运行效果如下:小测试Curses非常轻量级,特别适合处理简单的交互,替换复杂的参数输入程序。它优雅简洁,Curses也是其他文本终端UI的基础。NpyscreenNpyscreen也是一个用于编写文本终端的Python组件库,是一个基于Curses的应用框架。与Curses相比,Npyscreen更接近于UI风格的编程。通过组件组合完成UI显示和交互,Npyscreen可以适配屏幕变化。npyscreen提供了多种控件,如表单(Form)、单行文本输入框(TitleText)、日期控件(TitleDateCombo)、多行文本输入框(MultiLineEdit)、单选列表(TitleSelectOne)、进度条(TitleSlider)),等控制。提供强大的功能以满足快速程序开发的要求,无论是简单的单页程序还是复杂的多页应用程序。来看一个小例子:importnpyscreenclassTestApp(npyscreen.NPSApp):defmain(self):#这些行创建表单并用小部件填充它。#一个相当复杂的屏幕,只有8行左右的代码-每个控件一行。F=npyscreen.Form(name=“欢迎使用Npyscreen”,)t=F.add(npyscreen.TitleText,name=“文本:”,)fn=F.add(npyscreen.TitleFilename,name=“文件名:”)fn2=F.add(npyscreen.TitleFilenameCombo,name="Filename2:")dt=F.add(npyscreen.TitleDateCombo,name=“日期:”)s=F.add(npyscreen.TitleSlider,out_of=12,name="Slider")ml=F.add(npyscreen.MultiLineEdit,值=“”“尝试在此处键入!\n多行文字,按^R重新设置格式。\n“””,max_height=5,rely=9)ms.add(npyscreen.TitleSelectOne,max_height=4,value=[1,],name="选择一个",values=["Option1","Option2","Option3"],scroll_exit=True)ms2=F.add(npyscreen.TitleMultiSelect,max_height=-2,value=[1,],name="PickSeveral",values=["Option1","Option2","Option3"],scroll_exit=True)#这让用户与表单交互。f.edit()print(ms.get_selected_objects())if__name__=="__main__":App=TestApp()App.run()引入了npyscreen模块,如果没有可以通过pip安装:pipinstallnpyscreeninheritsnpyscreen.NPSApp创建一个应用类TestApp实现main方法,方法中创建一个Form表单对象,然后在表单对象上添加各种控件,设置控件的一些属性,调用表单对象的Edit方法,并将操作权交给用户。在运行时,实例化TestAPP,然后调用run方法启动应用程序,应用程序可以进入等待用户交互的状态。代码运行效果如下:Npyscreen[Tab]/[Shift+Tab]用于切换控件焦点[Enter]/[Space]用于进入选择、设置、确认在选择框中,方向键类似于vim的操作,就是说通过hjkl来控制是不是感觉很神奇?您可以对文本执行许多复杂的操作。命令行中进度显示的疑惑清楚了吗?如果说Urwid说Curses和Npysreen是轻量级文本终端UI框架,那么Urwid绝对是重量级选手urwid包含了很多开发文本UI的特性,比如:应用窗口自适应文本自动对齐,简单的文本块设置,强大的选择框控件,可以和各种事件驱动框架集成,比如Twisted,Glib,Tornado等.编辑框、按钮、多(单)选框等预制控件显示方式支持native、curses模式、LCD显示和网络显示支持UTF-8和CJK字符集(可显示中文)支持多种颜色查看效果:消息框多种字体颜色不知道大家看了是什么感觉,我的感觉是:这样太麻烦了~在GUI下几乎什么都能做!更何况,Urwid是一个完全基于面向对象思想的框架:Urwid结构图下面我们来做个小测试,感受一下Urwid的强大:importurwiddefshow_or_exit(key):ifkeyin('q','Q'):raiseurwid.ExitMainLoop()txt.set_text(repr(key))txt=urwid.Text(u"HelloWorld")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类似于一个面板,在上面填充txt控件,并设置位置在窗口的中央。按钮事件处理方法,使用之前定义的show_or_exitloop.run()启动UI,监听各种事件。运行这段代码,可以看到命令行设置为交互模式,按下按钮时,会在窗口中央显示键名,如果按下q键,程序将退出。注意:\urwid只能在Linux操作系统上运行,由于缺少必要的组件,无法在Windows上运行。限于篇幅总结,这里只展示了三个文本终端框架,但是我已经可以感受到文本终端UI框架的强大了。向上。还有一些优秀的框架,比如prompt_toolkit,有兴趣的同学可以研究一下。虽然基于文本终端的UI已经不再是主流,但在一些特殊的行业或业务中还是有其价值的。研究一下,说不定能在特殊的地方对我们有所帮助。最后,推荐一款非常有趣的基于文本终端的应用——命令网易云音乐:NetEase-MusicBox是基于Curses开发的。如果你运行它,你会被它的强大所震撼。有空的时候可以玩。爱它!以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能领取大量学习资料。或者去编程学习网了解更多编程技术知识。
