将 python Curses 与 Asciimatics 结合使用

问题描述

我用 Python 编写了一个 curses 程序,想知道是否可以在其中添加 asciimatics 动画?我打算在我的一个诅咒窗口中添加动画效果,但似乎我无法更改或调整添加了 asciimatics 效果的屏幕。

是否可以调整 asciimatics 屏幕的大小以将其添加到我的 curses 窗口中?

解决方法

[ 编辑:添加了使用现有诅咒句柄的选项。 ]

简短的回答可能不是没有对您的应用程序或 asciimatics 进行一些更改。

最简单的选择是让 asciimatics 在运行动画时接管。例如,如果这是一个标题页,只需在为您的应用初始化 ncurses 之前运行它。

如果你真的想把它嵌入到同一个屏幕中,你还有很多工作要做...

首先让我们弄清楚环境的细节...... Asciimatics 在本地可用的系统(例如 Linux、mac)上使用 ncurses,在 Windows 上使用 win32,所以如果你在 Windows 上使用 PDcurses 之类的东西,这是不兼容的。抱歉 - 没有真正的选择。

但是,如果您只使用像 Linux 这样的原生 curses 系统,您有几个选择...

  1. 将您的 curses 调用转换为等效的 Screen 调用。对于打印、使用颜色和获取字符输入,存在明显的一对一映射。如果您需要多个 curses 窗口,您可以使用 Canvases(如果这是用于 UI,则可能使用 Frames)在 asciimatics 中获得相同的效果。

  2. 考虑在 https://github.com/peterbrittain/asciimatics/issues/46 上工作。这将允许您直接在现有屏幕上开始绘图,而不是假设 asciimatics 可以初始化 ncurses 然后完全控制屏幕(包括清除屏幕和控制刷新)的当前实现。

  3. 将您的 curses 屏幕句柄传递给 asciimatics,然后确保您的更新与动画配合。如您所见,here 如果您已经有一个屏幕句柄,则可以构建curses screeb 处理程序。

选项 1 可能是最安全的,因为它使用单一一致的 API。如果您前往 asciimatics gitter 大厅(github 主页上的链接),我可以为您提供 2 方面的帮助。选项 3 可能有效,但使用内部 API(因此将来可能会中断)并且您需要使用 asciimatics 同步更新