Python Curses.newwin не работает
Вопрос
Я впервые изучаю проклятия, и я решил сделать это в Python, потому что было бы проще, чем постоянно перекомпиляции. Тем не менее, я ударил сцепку. Когда я пытаюсь обновить окно Seccond, я не получаю вывода. Вот кодовый фрагмент:
import curses
win = curses.initscr()
curses.noecho()
curses.cbreak()
curses.curs_set(0)
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
Окно обычного выигрыша инициализировано с INITSCR (), но окно поля не отображается. Любая помощь?
Редактировать: Вот новый, пересмотренный код, который до сих пор не работает.
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(25, 25, 6, 6)
field.border()
cont = True
x, y = 0, 0
while cont:
stdscr.clear()
field.clear()
coords = "%d, %d" % (x, y)
stdscr.addstr(5, 5, coords, curses.A_REVERSE)
field.addstr(y+2, x+2, "@", curses.A_BOLD)
chr = stdscr.getkey()
if chr == 'h':
if x > 0: x -= 1
if chr == 'l':
if x < 20: x += 1
if chr == 'j':
if y > 0: y -= 1
if chr == 'k':
if y < 20: y += 1
if chr == 'q':
cont = False
stdscr.clear()
field.clear()
stdscr.noutrefresh()
field.noutrefresh()
curses.doupdate()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
Решение 2
Ах, нашел проблему. Когда я использую STDSCR.clear (), он очищает весь терминал, включая новое окно. Все, что мне нужно было сделать, это сделать два окна, один для каждого отдельного дисплея.
Ох и благодаря выше для Curses.wrapper Совет. Говорят здесь, потому что я не могу опубликовать комментарий.
Другие советы
Кажется, хорошо для меня - я всегда использую curses.wrapper
И мой терминал не поддерживает курсор на видимость 0, так что это то, что у меня есть ...
import curses
ex = None
def main(stdscr):
global ex
try:
curses.curs_set(0)
except Exception, e:
ex = e
field = curses.newwin(1, 20, 1, 1)
field.addstr(0, 0, "Hello, world!", curses.A_REVERSE)
field.refresh()
field.getch()
curses.wrapper(main)
if ex is not None:
print 'got %s (%s)' % (type(ex).__name__, ex)
Я вижу обратную "привет, мир!", Затем, когда я ударил любой ключ, чтобы удовлетворить getch
Программа прекращается с ожидаемыми MSG got error (curs_set() returned ERR)
.
Что вы видите с этой программой ...? (Помните, что обертка делает initscr
и наборы noecho
а также cbreak
- И что более важно сбрасываться, когда закончится, поэтому я всегда использую его ;-).
Кстати, я использую PY 2.6.4 на Mac (OSX 10.5.8) и Terminal.app. Ваша платформа ...?