Edit text using Python and curses Textbox widget?

喜欢而已 提交于 2019-11-30 20:01:02

Found this there is several minutes

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

I also made a function to make a textbox:

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

To use it just do:

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

textpad.Textbox(win, insert_mode=True) provides basic insert support. Backspace needs to be added though.

The initial code didn't work, decided to have a hack at it, this works on insert mode and then when you press Ctrl-G display's the text at the right position.

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)

I found that the Edit widget in the urwid package is sufficient for my needs. This is not the Textpad widget, but something different. The urwid package is overall nicer, anyway. However, it's still not pain-free. The Edit widget does allow inserting text, but not overwriting (toggled with Ins key), but that's not a big deal.

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