1

如何请插入 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_

谢谢您的帮助。

4

3 回答 3

0

窗户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屏幕上(超过第 10 列 -的位置item_name)。stdscr.getstr调用不会item_name返回; 它只会返回您使用键盘输入的字符。如前所述,window.instr提供了一种将值item_namestdscr.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,您可以决定回显什么,以及处理编辑行内的左/右光标移动等事情。像编辑模板字符串这样的花哨的东西通常是由更简单的函数构建的。

于 2015-05-30T01:48:19.877 回答
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
于 2015-05-30T11:14:29.743 回答
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()
于 2015-06-14T20:14:00.197 回答