Bearbeiten von Text mit Python und Curses Textbox Widget?

Hat jemand ein funktionierendes Beispiel für die Verwendung der curses.textpad.Textbox Widget, um vorhandenen Text zu bearbeiten? Das ist natürlich in einem Linux-Terminal (zB xterm).

  • Gibt es irgendeine Möglichkeit, die Einheimischen zur Laufzeit zu beeinflussen?
  • Wie kann ich die Leerlaufzeit von Python in Windows, Linux und MacOS bestimmen?
  • Das benutzerdefinierte Benutzermodell mit django-allauth speichern
  • Konvertieren Sie Python Script in .exe, die auf allen / die meisten Versionen von Windows arbeiten wird
  • Rückkehr von einzigartigen Streichhölzern mit Regex in Python
  • Sortieren Sie den Unterwert in Python
  • Mod_wsgi und mehrere Installationen von Python
  • Negative Binomialmischung in PyMC
  • 4 Solutions collect form web for “Bearbeiten von Text mit Python und Curses Textbox Widget?”

    Hier finden Sie einige Minuten

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

    Ich habe auch eine Funktion gemacht, um ein Textfeld zu erstellen:

     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 

    Um es zu benutzen, machen Sie einfach:

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

    textpad.Textbox(win, insert_mode=True) bietet grundlegende Insert-Unterstützung. Backspace muss hinzugefügt werden.

    Der Anfangscode hat nicht funktioniert, beschlossen, einen Hack zu haben, das funktioniert im Einfügemodus und dann, wenn man die Strg-G-Anzeige den Text an der richtigen Position drückt.

     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) 

    Ich habe festgestellt, dass das Edit Widget im urwid- Paket für meine Bedürfnisse ausreichend ist. Das ist nicht das Textpad-Widget, sondern etwas anderes. Das urwid Paket ist sowieso total schöner. Allerdings ist es immer noch nicht schmerzfrei. Das Edit Widget erlaubt das Einfügen von Text, aber nicht überschreiben (mit Ins-Taste umgeschaltet), aber das ist keine große Sache.

    Python ist die beste Programmiersprache der Welt.