2011-01-03 8 views

Respuesta

0

Encontré que el widget Edit en el paquete urwid es suficiente para mis necesidades. Este no es el widget Textpad, sino algo diferente. El paquete urwid es en general mejor, de todos modos. Sin embargo, todavía no está libre de dolor. El widget Edit permite insertar texto, pero no sobrescribir (alternar con la tecla Ins), pero eso no es gran cosa.

6

encontrado esto hay varios minutos

import curses 
import curses.textpad 

stdscr = curses.initscr() 
# don't echo key strokes on the screen 
curses.noecho() 
# read keystrokes instantly, without waiting for enter to ne pressed 
curses.cbreak() 
# enable keypad mode 
stdscr.keypad(1) 
stdscr.clear() 
stdscr.refresh() 
win = curses.newwin(5, 60, 5, 10) 
tb = curses.textpad.Textbox(win) 
text = tb.edit() 
curses.beep() 
win.addstr(4,1,text.encode('utf_8')) 

También hice una función para hacer un cuadro de texto:

def maketextbox(h,w,y,x,value="",deco=None,underlineChr=curses.ACS_HLINE,textColorpair=0,decoColorpair=0): 
    nw = curses.newwin(h,w,y,x) 
    txtbox = curses.textpad.Textbox(nw) 
    if deco=="frame": 
     screen.attron(decoColorpair) 
     curses.textpad.rectangle(screen,y-1,x-1,y+h,x+w) 
     screen.attroff(decoColorpair) 
    elif deco=="underline": 
     screen.hline(y+1,x,underlineChr,w,decoColorpair) 

    nw.addstr(0,0,value,textColorpair) 
    nw.attron(textColorpair) 
    screen.refresh() 
    return txtbox 

Para usarlo simplemente hacer:

foo = maketextbox(1,40, 10,20,"foo",deco="underline",textColorpair=curses.color_pair(0),decoColorpair=curses.color_pair(1)) 
text = foo.edit() 
+1

Gracias por el esfuerzo. Probé el Textbox ya. Pero su edición es demasiado básica. Ni siquiera puedes insertar texto. Esperaba encontrar algo más parecido a nano, pero incrustable en una aplicación. – Keith

+1

Tuve que cambiar las dos últimas líneas a: 'stdscr.addstr (1,1, texto) stdscr.refresh()' para que funcione. Después de ingresar texto en el teclado, tuve que presionar Ctrl-G para enviarlo. –

3

textpad.Textbox(win, insert_mode=True) proporciona básica insertar soporte. Retroceso necesita ser agregado sin embargo.

1

El código inicial no funcionó, decidió tener un truco, funciona en modo insertar y luego, cuando presiona Ctrl-G, muestra el texto en la posición correcta.

import curses 
import curses.textpad 

def main(stdscr): 
    stdscr.clear() 
    stdscr.refresh() 
    win = curses.newwin(5, 60, 5, 10) 

    tb = curses.textpad.Textbox(win, insert_mode=True) 
    text = tb.edit() 
    curses.flash() 
    win.clear() 
    win.addstr(0, 0, text.encode('utf-8')) 
    win.refresh() 
    win.getch() 

curses.wrapper(main) 
Cuestiones relacionadas