2014-02-02 2 views
0

Я пытаюсь изучить проклятия для Python в Windows XP. Я могу заставить команду window.getkey работать правильно, но команда window.getstr не только терпит неудачу, но и программа выйдет. Здесь приведены примеры строки коды:Curses window.getstr()

x = window.getkey() # this works 
y = window.getstr() # this fails 

Очевидно, чтобы получить первую строку на работу я правильно импортированные проклятия и сделал команду stdscr = curses.initscr(). Мое окно определено и работает. Я попытался разместить координаты окна в getstr parens, и я использовал window.move. Ничего не работает.

Любые идеи, почему getstr не работает?

Вот больше информации после первого предложения:

Во-первых, предложение запустить программу в окне командной строки, а не с рабочего стола является хорошим, потому что окно действительно исчезает.

Вот цельность программы:

# program = testcurses 
import curses 
stdscr = curses.initscr() 

window = stdscr.subwin(23,79,0,0) 
window.box() 
window.refresh() 
window.addstr(2,10, "This is my line of text") 
window.addstr(4,20,"What happened? ") 
window.refresh() 

mykey = window.getkey(5,20) 
mystr = window.getstr (6,20) 
#window.addstr (7,1, "Key data should be here: ") 
#window.addstr (7,33, mykey) 
window.addstr (8,1, "Str data should be here: ") 
window.addstr (8,33,mystr) 
window.refresh() 

Я заметил строки, относящиеся к отображению данных ключа, так что хорошо работает.

Вот соответствующая часть сообщения TraceBack:

window.addstr (8,33, mystr) TypeError: должна быть улица, а не байт.

Том

+0

Любая трассировка? Если окно исчезнет, ​​попробуйте вручную открыть командную строку, а затем вызовите команду python, чтобы закрыть окно – mhlester

ответ

1

отслеживающий говорит вам, что переменная mystr является байт объект не является строкой. Это означает, что вы должны сначала декодировать его, прежде чем использовать его в виде строки, которая необходима addstr().

Вот изменения вам нужно сделать:

mystr = window.getstr(6,20).decode(encoding="utf-8") 

Это Python 3 проблема ТОЛЬКО! Я тестировал это с помощью Python 2.7, который работает без этого изменения. Проблема возникает из-за различной обработки байтов/строк между Python 2 и 3. Я предполагаю, что вы следовали через учебник py2 при использовании py3 самостоятельно.