当前位置: 首页 > 后端技术 > Python

Python文本终端GUI框架,酷毙了_0

时间:2023-03-25 22:37:32 Python

今天,笔者就带大家梳理几款常见的基于文本终端的UI框架,一起来看看吧!第一个出现的Curses是Curses[1]。Curses是一个为基于文本的终端窗口提供功能的动态库。它可以:使用整个屏幕来创建和管理窗口使用8种不同的颜色为程序提供鼠标支持使用键盘上的功能键Curses可以在任何符合ANSI/POSIX标准的Unix/Linux系统上运行。Windows下也可以运行,但是需要额外安装windows-curses库:pipinstallwindows-curses可以使它起死回生古董机。我们也来试试:importcursesmyscreen=curses.initscr()myscreen.border(0)myscreen.addstr(12,25,"Pythoncursesinaction!")myscreen.refresh()myscreen.getch()curses.endwin()需要注意的是addstr的前两个参数是字符坐标,不是像素坐标。getch将阻塞程序,直到它等待键盘输入。()对获取的输入进行判断,代码运行效果如下:Curses非常轻量,特别适合处理简单的交互,替换复杂的参数输入程序。它优雅简洁,Curses也是其他文本终端UI的基础。NpyscreenNpyscreen[3]也是一个编写文本终端的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]用于进入选择、设置、确认在选择框中,箭头keys和vim[4]的操作类似,通过hjkl来控制是不是很神奇?您可以对文本执行许多复杂的操作。命令行中进度显示的疑惑清楚了吗?如果说Urwid说Curses和Npysreen是轻量级的文本终端UI框架,那么Urwid[5]绝对是重量级选手urwid包含很多开发文本UI的特性,例如:应用程序窗口自适应文本自动对齐、文本块的简单设置、强大的选择框控件,并且可以与各种事件驱动框架集成,例如Twisted[6]、Glib[[7]、Tornado[8]等提供了编辑框、按钮、多(单)选框等多种预制控件。显示模式支持原生、Curses模式、LCD显示和网络显示。中文)支持多种颜色看效果:不知道大家看到是什么感觉,我的感觉是:这样太麻烦了~在GUI下几乎什么都可以!更何况,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已经不再是主流,但在一些特殊的行业或业务中还是有其价值的。研究一下,说不定能在特殊的地方对我们有所帮助。最后,推荐一款非常有趣的基于文本终端的应用——命令行网易云音乐[9]:它是基于Curses开发的,如果运行起来,你会被它的强大所震撼。有空可以玩玩,比心!