如何请插入INPUT项目的预定义名称?
我的努力:(信息:角色" _"是光标)
def Edit_Item(stdscr, item_name)
stdscr.addstr(1, 2, "Item Name:")
r = stdscr.getstr(2, 16, 15)
return r
Edit_Item(stdscr, 'Foo')
Edit_Item(stdscr, 'Bar')
结果:
Item Name: _
Item Name: _
期望的结果:
Item Name: Foo_
Item Name: Bar_
感谢您的帮助。
答案 0 :(得分:0)
window.getstr
函数从键盘读取新数据(并将其放入屏幕)。也许您的意思是window.instr
,因为您似乎可以假设您可以回读addstr
来电中添加的数据。
示例函数中未使用参数item_name
。您可以使用window.addstr
将其写入屏幕,以及填充下划线(未完成)。你可以做到这一点:
def Edit_Item(stdscr, item_name)
stdscr.addstr(1, 2, "Item Name:" + item_name + "_" )
r = stdscr.getstr(2, 16, 15)
return r
给出的示例首先将光标移动到屏幕上的2,16
(过去 item_name
的位置 - 在第10列)。 stdscr.getstr
调用不会返回item_name
的值;它将仅返回 您使用键盘输入的字符。如上所述,window.instr
提供了一种结合item_name
和stdscr.getstr
调用值的方法。
然而,即使这种组合还不够,因为stdscr.getstr
将从其起点返回字符。因此,您无法在使用addstr
写入的值的末尾启动调用。如果你这样做:
def Edit_Item(stdscr, item_name)
stdscr.addstr(1, 2, "Item Name:" + item_name + "_" )
r = stdscr.getstr(2, 10, 15)
r = stdscr.instr(2, 10, 15)
return r
它会更接近你的意图,但是(未经测试)当你按 enter 时,可能会删除光标位置后面的字符。如果您修改了使用getch
的解决方案,则可以决定要回显的内容,以及处理编辑行中左/右光标移动等内容。编辑模板字符串等奇特的东西通常是用更简单的函数构建的。
答案 1 :(得分:0)
@Thomas Dickey: 不:-(我会尽力更好地描述我需要的东西..
- Call function 'Edit_Item' with parameter 'Foo' # OK
- The screen prints 'Item Name: Foo' # OK
- Cursor is now behind the word 'Foo_' # OK
- Press the key arrow left (2x) to change the cursor 'F_o' # Not work
- Edit word 'Foo' to 'Fao'
这是明白的吗?
这正是我在诅咒中需要做的事情。
Bash中的演示
read -e -i "Foo" -p "Edit Item Name: " ITEM
答案 2 :(得分:0)
我通常这样做:
import curses
screen = curses.initscr()
curses.noecho()
curses.cbreak()
curses.start_color()
screen.keypad( 1 )
screen.border( 0 )
curses.curs_set( 2 )
string = "Foo"
max_len = 40 #max len of string
screen.addstr( 3, 1, "Item Name: " )
screen.addstr( 3, 12, string )
screen.refresh()
position = len( string )
x = screen.getch( 3, 12 + position )
while x != 27:
if (x <= 122 and x >= 97) or x == 32 or (x <= 90 and x >= 65):
if position == len( string ):
if len( string ) < max_len:
string += chr( x )
position = len( string )
else:
string = string[ 0:position ] + chr( x ) + string[ position + 1: ]
if x == 263:
if position == len( string ):
string = string[ 0:len( string ) - 1 ]
position = len( string )
else:
string = string[ 0:position -1 ] + string[ position: ]
if position > 0:
position -= 1
if x == 330:
if position == len( string ) - 1:
string = string[ 0:len( string ) - 1 ]
else:
string = string[ 0:position +1] + string[ position + 2: ]
if x == curses.KEY_RIGHT:
if position < len( string ):
position += 1
if x == curses.KEY_LEFT:
if position > 0:
position -= 1
screen.erase()
screen.border( 0 )
screen.addstr( 3, 1, "Item Name: " )
screen.addstr( 3, 12, string )
x = screen.getch( 3, 12 + position )
curses.endwin()
exit()