2017-03-12 9 views
0

を得ることはありません、私は呪いを学ぶために使用しています私の完全なコードです:呪いキーパッド(真)は、私はここの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 

答えて

1

問題は、あなたがメインウィンドウにkeypadプロパティを設定することであるが、getchを使用して別のウィンドウから読んでいます。この変更により、プログラムではKEY_UPを受け取ります。

--- curses-vs-keypad.py 2017/04/02 11:07:41  1.1 
+++ curses-vs-keypad.py 2017/04/03 00:57:16 
@@ -28,6 +28,7 @@ 
    print("yo man") 
    x = Cursor() 
    window = x.start_win() 
+ window.keypad(True) 
    try: 
     # This raises ZeroDivisionError when i == 10. 
     for i in range(0, 11):