2011-01-03 2 views

Odpowiedz

0

Znalazłem, że widget Edit w pakiecie jest wystarczający dla moich potrzeb. To nie jest widżet Textpad, ale coś innego. W każdym razie pakiet urwid jest ogólnie przyjemniejszy. Jednak nadal nie jest bezbolesny. Widget Edit umożliwia wstawianie tekstu, ale nie zastępowanie go (przełączanie klawiszem Ins), ale to nie jest wielka sprawa.

6

Znaleziony to jest kilka minut

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')) 

Ja również funkcję do pola tekstowego:

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 

go użyć po prostu zrobić:

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

Dzięki za wysiłek. Próbowałem już Textboxa. Ale jego edycja jest zbyt prosta. Nie możesz nawet wstawić tekstu. Miałem nadzieję znaleźć coś bardziej podobnego do nano, ale można je osadzać w aplikacji. – Keith

+1

Musiałem zmienić dwa ostatnie wiersze na: 'stdscr.addstr (1,1, text) stdscr.refresh()', aby działało. Po wprowadzeniu tekstu w panelu tekstowym musiałem nacisnąć Ctrl-G, aby go przesłać. –

3

textpad.Textbox(win, insert_mode=True) zapewnia podstawowy wstaw wsparcie. Backspace należy jednak dodać.

1

Początkowy kod nie zadziałał, zdecydował się na włamanie, działa on w trybie wstawiania, a następnie po naciśnięciu klawisza Ctrl-G wyświetla tekst we właściwej pozycji.

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)