首页 > 解决方案 > 将 python 诅咒与 Asciimatics 相结合

问题描述

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

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

标签: pythonterminalncursescursesasciimatics

解决方案


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

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

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

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

首先让我们澄清一下环境的细节...... Asciimatics 在本机可用的系统(例如 Linux、mac)和 Windows 上的 win32 上使用 ncurses,所以如果您在 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,然后确保您的更新与动画配合。如您在此处看到的,如果您已经有屏幕句柄,则可以构建 curses 屏幕处理程序。

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


推荐阅读