Czy ktoś ma działający przykład wykorzystania widgetu curses.textpad.Textbox do edycji istniejącego tekstu? Jest to oczywiście w terminalu systemu Linux (na przykład xterm).Edytować tekst za pomocą Pythona i przeklina Widget Textbox?
7
A
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()
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)
Powiązane problemy
- 1. Android Widget za pomocą Cordova
- 2. Pobierz tekst z asp: textbox
- 3. Jak dynamicznie zmieniać widżety potomne za pomocą Pythona i Qt?
- 4. Tekst mieszania WPF i tekstu stałego w TextBox
- 5. Najlepszy sposób konwertowania HTML na tekst jawny za pomocą Pythona
- 6. Jak zmienić tekst etykiety w języku kivy za pomocą pythona
- 7. Dodaj zaawansowane funkcje widget tkinter Tekst
- 8. Jak utworzyć widget pogody za pomocą jquery i trochę API?
- 9. Zakrzywiony tekst za pomocą HTML i CSS
- 10. Edytowanie arkuszy programu Excel za pomocą Pythona
- 11. Obliczanie kowariancji za pomocą Pythona i Numpy
- 12. Nie można edytować pliku NSTableView za pomocą kliknięcia
- 13. wpf: Wybór tekstu w TextBox za pomocą IsReadOnly = true?
- 14. Jak dodać pogrubiony tekst w Rich TextBox programowo za pomocą VB.NET
- 15. Wykrywanie anomalii za pomocą Pythona
- 16. Przekierowanie wejścia za pomocą pythona
- 17. Parsowanie SQL za pomocą Pythona
- 18. Skrobanie ekranu za pomocą Pythona
- 19. Usuwanie małych słów za pomocą Pythona
- 20. Pozwól użytkownikowi edytować tekst w komórce UITableView
- 21. Narysuj teren za pomocą pythona?
- 22. Python: przeklina kluczowe kody do czytelnej składni (vim-like?)
- 23. Czy mogę uzyskać edytować tekst zostawić wydarzenie
- 24. Jak edytować tekst nagłówka w trybie ręcznym?
- 25. Jak wstawić/edytować pole hierarchyid jako tekst w SQL studio
- 26. Odczytaj plik z serwera za pomocą ssh za pomocą pythona
- 27. Jak powiązać zdarzenie onchange w TextBox za pomocą JQuery?
- 28. Iterowanie za pomocą punktów podłączenia za pomocą Pythona
- 29. Dynamiczne dodawanie TextBox za pomocą przycisku w ramach MVVM
- 30. Jak edytować wartość szesnastkową pliku binarnego za pomocą C#
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
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ć. –