を得ることはありません、私は呪いを学ぶために使用しています私の完全なコードです:呪いキーパッド(真)は、私はここのPython 2と3の両方のコードを記述しようとしています特別なキー
# -*- coding: utf-8 -*-
from __future__ import print_function
import curses
import sys
import traceback
class Cursor(object):
def __init__(self):
self.stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
self.stdscr.keypad(True)
def end_window(self):
curses.nocbreak()
self.stdscr.keypad(False)
curses.echo()
curses.endwin()
def start_win(self, begin_x=0, begin_y=1, height=24, width=71):
return curses.newwin(height, width, begin_y, begin_x)
def applic():
print("yo man")
x = Cursor()
window = x.start_win()
try:
# This raises ZeroDivisionError when i == 10.
for i in range(0, 11):
v = i - 10
key = window.getch()
# EDIT - Added this debug line to verify what key gets
window.addstr('type of {} is {}\n'.format(key, type(key)))
if key == curses.KEY_UP:
return
window.addstr('10 divided by {} is {}\n'.format(v, 10 // v))
window.refresh()
except Exception:
x.end_window()
errorstring = sys.exc_info()[2]
traceback.print_tb(errorstring)
applic()
私の問題は、ということですkey
は、getch()(またはgetkey())がKEY_UP(\x1b]A
)に等しいエスケープキーコード全体ではなく、単一文字列を返すため、curses.KEY_UP
に決して等しくなりません。だから、それぞれの時間は、私が日常的に上矢印キーを押し、プログラムのキーコード\x1b
、[
、A
の三つの部分を循環し、3つの出力のライン生産:この試験のための
10 divided by -10 is -1
10 divided by -9 is -2
10 divided by -8 is -2
は、私が欲しいですUP矢印キーを押して、iが10のときに予想される例外が発生する前に抜け出すことができます。
Cursesのpythonのドキュメントによると、stdscr.keypad(True)
はキーコード全体を返すことができますが、そう。
何が戻ってくるかを示すために、デバッグ用の印刷出力情報を追加しました。 getch()またはgetkey()のどちらを使用する場合でも、結果は同じです。それは、(ドキュメントが整数でgetchはのために返されることが示された)文字列を返します:
type of ^[ is <class 'str'>
10 divided by -9 is -2
type of [ is <class 'str'>
10 divided by -8 is -2
type of A is <class 'str'>
10 divided by -7 is -2