-
-
Save myano/1055442 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
import curses | |
import curses.textpad | |
import time | |
stdscr = curses.initscr() | |
#curses.noecho() | |
#curses.echo() | |
begin_x = 20 | |
begin_y = 7 | |
height = 5 | |
width = 40 | |
win = curses.newwin(height, width, begin_y, begin_x) | |
tb = curses.textpad.Textbox(win) | |
text = tb.edit() | |
curses.addstr(4,1,text.encode('utf_8')) | |
#hw = "Hello world!" | |
#while 1: | |
# c = stdscr.getch() | |
# if c == ord('p'): | |
# elif c == ord('q'): break # Exit the while() | |
# elif c == curses.KEY_HOME: x = y = 0 | |
curses.endwin() |
Thank you for the example @qguv For some reason, every time I try any python curses example (both Putty and xterm) the terminal gets corrupted after i exit the program. I can no longer see what I'm typing, and commands like ls produce output without newlines. Do you know what the issue could be? This is python 2.7.3, btw.
@riteshk, are you sure that you're calling the curses.endwin()
function? Even if you are, if your code somehow exits due to an exception, your terminal will be changed because curses.endwin()
will not have been called?
For this reason, it is recommended that you wrap your curses program in curses.wrapper()
so that things fail gracefully.
I like it without wrapper() - makes it easier to type into command-line python.
D'oh! why did I think that work work??? :-)
To get out, I just hit ^C and then pasted in the endwin() call
Thanks so much ;)
If your terminal gets completely hosed, you can usually run "tset" which means Terminal reSET.
How you can avoid keyboard interrupt problems: catch it, and reset the curses variables.
def reset(screen):
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.endwin()
try:
#your code
#if it terminates, call `reset(screen)` here too.
except KeyboardInterrupt:
reset(screen)
exit()
if c == ord('p'): print hw
?
Can someone explains me the usage of curses.wrapper()? It looks pretty simple.
Quick tip, if you exit without cleaning up and your terminal is in a wonky state, just run stty sane
and it'll be good as new 😀
When I try to use the curses. I use UBUNTU and the code returns this error:
Traceback (most recent call last):
File "/home/andre/Desktop/Python - Programas/exemplo curses.py", line 4, in
stdscr = curses.initscr()
File "/usr/lib/python3.6/curses/init.py", line 30, in initscr
fd=_sys.stdout.fileno())
_curses.error: setupterm: could not find terminal
Someone knows why this occurs?
@qguv I'm glad this was helpful!