首页 > 编程问答 >除了curses之外,是否有一个python包可以轻松控制终端的输出?

除了curses之外,是否有一个python包可以轻松控制终端的输出?

时间:2024-07-21 04:48:43浏览次数:10  
标签:python user-interface text terminal package

我现在正在处理一些小项目,我对 GUI 的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理 Windowscurses 二进制文件,所以我正在寻找不同的选项。我已经发现了 asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。

谢谢


你说的没错,除了 curses 之外,还有几个 Python 包可以创建美观的终端应用程序,而无需使用 Windowscurses 二进制文件。以下是一些流行选项,以及它们的优缺点:

1. Rich (及其扩展 Rich CLI)

  • 优点:
    • 漂亮且功能丰富: Rich 擅长渲染格式化的文本、表格、markdown、进度条、代码等,并且外观精美。
    • 易于使用: 语法简单直观。
    • 活跃的社区: Rich 维护良好,并拥有一个大型且活跃的社区。
  • 缺点:
    • 非交互式: Rich 主要用于输出格式化的文本,而非处理用户输入。你需要将其与其他库(如 prompt_toolkit )结合使用,以实现全面的 TUI 体验。
  • 理想用途:
    • 命令行应用程序,需要精美的格式化输出,如日志记录器、进度指示器或静态数据查看器。

2. Prompt Toolkit

  • 优点:
    • 功能强大的交互性: Prompt Toolkit 非常适合构建具有自动完成、输入验证、多行编辑和其他高级功能的交互式 CLI 应用程序。
    • 可定制性高: 它提供了对终端输入和输出的精细控制。
  • 缺点:
    • 比 Rich 更复杂: 学习曲线更陡峭,尤其是对于简单的应用程序而言。
  • 理想用途:
    • 复杂且交互式的终端应用程序,如 CLI 工具、文本编辑器或终端模拟器。

3. Asciimatics

  • 优点:
    • 动画和视觉效果: Asciimatics 擅长创建基于终端的动画和视觉效果,即使对于简单的 UI 元素也是如此。
  • 缺点:
    • 可能过于强大: 对于简单的文本界面来说,它可能有些过犹不及。
  • 理想用途:
    • 具有动画、视觉效果或类似游戏的元素的终端应用程序。

4. PyTermGUI

  • 优点:
    • 现代的基于小部件的方法: PyTermGUI 使用基于小部件的布局,类似于 GUI 框架,使其易于创建结构化的界面。
    • 基于鼠标的支持: 它支持鼠标交互,这在某些应用程序中可能很有用。
  • 缺点:
    • 相对较新: 与其他选项相比,它是一个较新的库,因此社区支持和功能可能有限。
  • 理想用途:
    • 具有按钮、对话框和菜单等传统 GUI 元素的终端应用程序。

选择哪个?

  • 对于 精美的格式化输出 ,但不一定需要交互性,请选择 Rich
  • 对于 高度交互式的 CLI 应用程序 ,请选择 Prompt Toolkit
  • 对于具有 动画和视觉效果 的应用程序,请选择 Asciimatics
  • 对于 现代的基于小部件的方法 ,请选择 PyTermGUI

最终,最佳选择取决于你项目的具体需求和个人喜好。建议你尝试几个选项,看看哪个最适合你。

标签:python,user-interface,text,terminal,package
From: 78773847

相关文章

  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......
  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • 关闭 contextlib 模块时如何模拟 psycopg2.connect?
    我有以下带有get_data方法的数据库类。它使用“contextlib”模块的“关闭”来关闭连接。classDatabase:def__init__(self)->None:self.db_details={<connectiondetails>}defget_data(self,query,parameters):withclosing(psycopg2......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......
  • 使用 requests 包 python 时打开文件太多
    我正在使用Pythonrequests包向API发出大量请求。然而,在某些时候,我的程序由于“打开的文件太多”而崩溃。当我明确关闭我的会话时,我真的不知道这是怎么回事。我使用以下代码:importrequestsimportmultiprocessingimportnumpyasnps=requests.session()s.keep......
  • Python 是一种选择性解释语言吗?为什么下面的代码不起作用?
    由于程序是从上到下运行的,为什么下面的代码不执行块中的第一行就直接抛出错误?if5>2:print("TwoislessthanFive!")print("Fiveisgreaterthantwo!")错误:文件“/Users/____/Desktop/Pythonpractise/practise.py”,第3行print("五比二大!")Indentati......