가장 먼저 등장하는 것은 Curses[1]입니다.
Curse
Curses는 다음을 수행할 수 있는 텍스트 기반 터미널 창 기능을 제공하는 동적 라이브러리입니다.
Curses는 ANSI/POSIX 표준을 따르는 모든 Unix/Linux 시스템에서 실행될 수 있습니다. Windows에서도 실행할 수 있지만 windows-curses 라이브러리를 추가로 설치해야 합니다.
pip install windows-curses
위 그림은 친구가 Curses[2]를 사용하여 작성한 테트리스 게임입니다. 골동품 기계를 부활시키는 데 사용됩니다.
새로운 것을 시도해 봅시다:
import curses myscreen = curses.initscr() myscreen.border(0) myscreen.addstr(12, 25, "Python curses in action!") myscreen.refresh() myscreen.getch() curses.endwin()
코드 실행 효과는 다음과 같습니다.
작은 테스트
Curses는 매우 가볍고 처리에 특히 적합합니다. 복잡한 매개변수 입력을 대체하는 프로그램인 Simple Interaction은 우아하면서도 단순하며, Curses는 다른 텍스트 터미널 UI의 기반이기도 합니다.
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
텍스트로 너무 많은 복잡한 작업을 수행할 수 있다는 사실이 놀랍지 않나요? 명령줄의 진행률 표시에 대한 이전 의심이 명확해졌습니다~
Curses 및 Npysreen 경량 텍스트 터미널 UI 프레임워크라면 Urwid[5]는 확실히 헤비급 플레이어라고 부를 수 있습니다.
Urwid에는 다음과 같은 텍스트 UI 개발을 위한 많은 기능이 포함되어 있습니다.
효과 보기:
메시지 상자
다중 글꼴
色彩
不知道你看了是什么感觉,我的感觉是:这也太卷了吧~
几乎可以做 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 텍스트 터미널 GUI 프레임워크, 정말 멋지네요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!