2012-07-01 33 views
6

当我在我的Mac终端中使用less命令时,我显示了指定文件的23行切片。如果我向下移动文件,然后在终端窗口中向上滚动,在当前切片之前没有看到任何文件内容。相反,我看到在使用less之前输入的命令。如何在Python中创建静态框架式ASCII接口?

我想用这个或类似的效果来创建一个只显示当前屏幕但没有历史的ascii游戏界面。我会在屏幕上绘制我的框架,并只更改这些框架内的文本或选项。这在大多数或完全在命令行环境中运行的较老系统中很常见。

是否有Python模块提供此功能?这是我能够或应该实现自己的效果吗?

以下是一些可从此效果中受益的示例屏幕元素。

+-------------------------------------------------------------------+ 
|                 | 
| Dialog dialog dialog dialog dialog dialog dialog dialog dialog | 
| dialog dialog dialog dialog dialog dialog dialog dialog dialog | 
| dialog dialog dialog dialog dialog dialog dialog dialog dialog | 
| dialog dialog dialog dialog dialog dialog dialog dialog dialog | 
| dialog dialog dialog dialog.          | 
|                 | 
|                 | 
|                 | 
+--------------------+---------------+------------------------------+ 
| Attack   |  South  |   HP/Max MP/Max | 
| > Cast Magic  |  -  | Tom: 120/120 60/91 | 
| Use Item   |  New  | > Dick: 27/133 47/47 | 
| Tactics   | Schwartzton | Harry: 87/104 16/113 | 
+--------------------+---------------+------------------------------+ 

回答

6

我建议看看curses模块。这是一个ncurses库的接口,它正是用于这个目的(我相信有许多终端应用程序都在其中)。 documentation是相当不错的,并有几个不错的tutorials,这也应该让你在正确的方向。

(无论是自由使用还是自由使用\r)。我强烈建议curses模块,因为它应该为您要做的事提供更大的灵活性。

编辑:如果您有兴趣创建一个跨平台的应用程序,请记住,curses模块仅适用于* nix系统。根据文档:

没有人制作了一个Windows端口的curses模块。

该教程建议在Windows上使用this library,虽然如果下载页面上的日期有任何提示,它仍未在相当长的时间内更新。你可以看看this module,看起来相当近。

+0

这太好了!幸运的是,我在Unix/Linux社区,所以我可以专注于此。我将书签'console'模块以备后用。 –

+0

这篇文章比较陈旧,curses页面现在表明在[本页](https://pypi.python.org/pypi/UniCurses)中存在一个Windows端口。 – KGVT

3

你在说什么是curses。它是一个与ncurses接口的Python模块。我发现使用curses的最佳教程是这一个:http://www.dev-explorer.com/articles/python-with-curses

一些使用curses(尽管来自另一种语言)的流行程序是aptitude和nano。

+0

能力和纳米使用诅咒。 vim使用termcap(不是诅咒)。 wget和墨水是硬编码的(没有诅咒)。 –

+0

@ThomasDickey很高兴知道,更新! – C0deH4cker

1

我一直在努力解决这个问题。我想要一个简单的跨平台解决方案,所以我扩展了asciimatics以提供一组widgets来创建这样的基于表单的UI。例如:

Text UI widgets

生成的代码应该无需安装额外的机库是相当简洁,工作在任何现代的操作系统(包括Windows,Linux和OSX)。正如您从contact list sample中看到的那样,标准小部件很容易布局,并且应该满足您的大部分需求。

-1

如果你想做一个ascii游戏,asciimatics可能不会起作用,因为它主要用于诸如表单之类的东西。使用curses绝对是一种方式。尽管Windows没有官方的curses端口,但在https://www.lfd.uci.edu/%7Egohlke/pythonlibs/#curses有一个非官方的端口,所以一定要检查一下。

+0

您是否阅读过关于asciimatics的文档?低级别的API可以完成所有诅咒给你的东西,并且可以直接在Windows上运行。 –