9

我一直在尝试在 python 2.7 中制作自己的基于文本的 UI,但我想到了关于输入的想法。所以我想出了这样input = raw_input("|" + "input: ".center(78) + "|")的东西:,但是粗略,光标在右边很远(只是意识到它在我输入它之前不起作用:P)。所以,问题是,我如何在屏幕中间放置一个输入,文本在同一行(两侧),并在我写下“输入:”后有光标类型?如果您想知道,我正在使用这个:

if True:
    print c + "Hi! This is a text-based GUI!".center(78, h) + c
    print c + "-" * 78 + c
    print v + "OPTIONS".center(78) + v
    print c + "-" * 78 + c
    print v + "1 - Quit".center(78) + v
    for i in range(1, 7):
        print v + " " * 78 + v
    print c + "-" * 78 + c

在解释器中,它看起来不错:

+------------------------Hi! This is a text-based GUI!-------------------------+
+------------------------------------------------------------------------------+
|                                   OPTIONS                                    |
+------------------------------------------------------------------------------+
|                                   1 - Quit                                   |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
+------------------------------------------------------------------------------+

注意:我使用的是 Windows XP

4

6 回答 6

17

对于这种文本 UI,您需要一个终端库,该库了解您的屏幕的基本布局和功能以及支持的输入设备。

在 Linux(或 OSX)上,广泛认可的标准是ncurses. Python 提供了一个模块来包装这个原生库。然而,这个(以及任何使用这个的包——例如urwid)在 Windows 上的使用是有限的。

在您的情况下,您需要使用其他东西来提供对本机 Win32 控制台 API 的访问。那可能是 cygwin,PDcurses 的自定义安装,或者像pywin32.

或者,如果您真的不想担心所有特定于操作系统的废话,您可以安装asciimatics。这提供了一个跨平台的 API,可以将文本放置在屏幕上的任何位置并处理键盘输入。此外,它提供了更高级别的小部件来创建文本 UI,如下所示:

文本 UI 小部件

完全披露:是的 - 我是这个包的作者。

于 2016-06-03T23:00:20.610 回答
7

curses还可以尝试构建在高级框架之上的有用urwid。有了那个东西,你可以做丰富多彩的界面。按钮编辑字段,甚至状态栏进度条以及所有您需要的东西。要开始工作,您只需要curses安装 Python 和urwid包含其源代码的文件夹(您可以将整个urwid库与您的应用程序一起作为独立包传输!)。它甚至在cygwinWindows XP/7 下也能工作,正如我们所知,curses没有Python.

urwid 文件夹

不再低级,有时很无聊curses:)

于 2013-08-11T22:49:34.307 回答
3

在原始问题几年后添加另一个选项。根据Picotui的作者:

Picotui 是 Python3 的文本用户界面 (TUI) 小部件库。它可以与 CPython3 和 Pycopy 一起使用(后者正式支持 Unix 版本),但应该与任何允许访问 stdin/stdout 文件描述符的 Python3 实现一起使用。

作者还继续将 PicoTUI 与 Urwid 进行比较。那里有一些有趣的观点。我希望将 PicoTUI 用于我希望开始的项目。诚然,没有第一手经验。在为我的 TUI(基于文本的 UI 或基于终端的 UI,在 GUI 意义上)Python 库寻找答案时遇到了这个问题,因此考虑添加此选项。

于 2019-12-06T04:19:07.390 回答
1

好吧,你所有的答案都很棒,但我想我可以将它用于输入而不是 3rd 方库:

c = "+"
h = "-"
print c + h*78 + c
inputa = raw_input(" "*32 + "Input example: ")
print c + h*78 + c

这对我有用。

于 2013-08-12T11:42:09.150 回答
1

input()对于此类任务,该功能并不复杂。

您最好使用可以控制 Unix 终端的库,例如curseslibrary。该库本质上允许您构建一个简单的终端 GUI。

如果你需要更多,也可以看看Urwid。Urwid 为有眼光的终端 GUI 开发人员提供了更复杂的 GUI 小部件。

不幸的是,您不能curses在 Windows 上使用该模块;显然有 DOS 和 OS/2 端口,但它主要是一个仅限 POSIX 的库。在 Windows 上,您必须使用诸如 的端口wcurses,或者您可以尝试该console模块(后者以类似的方式驱动 Windows CMD 控制台)。

于 2013-08-11T22:03:32.990 回答
1

对于一个好的基于文本的 ui,你可以使用 curses。

http://docs.python.org/2/library/curses.html

于 2013-08-11T22:03:43.903 回答