Input in a Python text-based GUI (TUI)

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

I have been trying to make my own UI that is text-based in python 2.7, but I thought of an idea about input. So I figured something like this: input = raw_input("|" + "input: ".center(78) + "|"), but of coarse, the cursor is way far on the right (just realized it wouldn't work before i even typed it in :P). So, the question is, is how do I put an input in the middle of the screen with text on the same line (on both sides) and have the cursor type after I write "Input: "? And if your wondering, im using this:

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 

in the interpreter and it looks decent:

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

Note: I use Windows XP

回答1:

Also try useful built atop curses high level framework urwid. With that thing you could do rich and colorful interfaces. Buttons, edit fields, even status bars and progress bars and all that you need. To start working you only need Python curses installed and urwid folder with its sources (you can transfer whole urwid library with your application as standalone bundle!). It works even under cygwin under Windows XP/7 where is, as we know, no curses ports for Python.

urwid portfolio

No more lowlevel, sometimes very boring curses :)



回答2:

What you need for this sort of text UI is a terminal library that understands the basic layout and capabilities of your screen and the supported input devices.

On Linux (or OSX), the widely recognised standard is ncurses. Python provides a module to wrap this native library. However, this (and any package that uses this - e.g. urwid) are of limited use on Windows.

In your case, you need to use something else that provides access to the native Win32 console API. That would either be cygwin, a custom install of PDcurses, or a package like pywin32.

Alternatively, if you really don't want to worry about all that OS specific nonsense, you could just install asciimatics. This provides a cross-platform API to place text anywhere on the screen and process keyboard input. In addition, it provides higher level widgets to create text UIs like this:

Full disclosure: Yes - I am the author of this package.



回答3:

Try curses, there is also a windows version pdcurses



回答4:

The input() function is not nearly sophisticated for this kind of task.

You'd be better of with a library that can control the Unix terminal, such as the curses library. The library essentially lets you build a simple terminal GUI.

If you need more, take a look at Urwid as well. Urwid offers more complex GUI widgets for the discerning terminal GUI developer.

You can't use the curses module on Windows unfortunately; apparently there are DOS and OS/2 ports but it is primarily a POSIX-only library. On Windows you'll have to use a port such as wcurses, or you could try the console module (the latter drives the Windows CMD console in a similar manner).



回答5:

For a good text-based ui, you could use curses.

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



回答6:

Well, all of your answers were great, but I think I can use this for inputs instead of a 3rd party library:

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

which would work for me.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!