Python组合键入检测 - ESC和Enter

时间:2012-04-19 10:13:57

标签: python keyboard

在下面的doDebuggingMenu函数中,我使用raw_input函数获取用户输入(使用Python 2.6)。此功能等待,直到用户输入char序列并按Enter键。无论如何,我想让用户只需按下键盘上的ESC按钮即可退出应用程序,而无需按Enter键(请参阅我打算实现此行为的函数中的最后一个elif块)。对于其他菜单选项,用户应该能够按下回车按钮,因为菜单中有选项需要输入两位数字。我的问题是如何在以下函数中提供这种组合行为?感谢

def doDebugingMenu():
    while(1):
        printDebugingMenu()

        char = raw_input("\nPlease, enter your selection in the debugging menu...:")       

        if  char == '1':
           doSetTraceLevelManually()   
        elif  char == '2':
           doSetTraceDomain() 
        elif  char == '3':
           doPrintLevels()                                            
        elif  char == '4':
           doPrintConfig()
        elif  char == '5':
           doPrintProfile()
        elif  char == '6':
           doPrintMap()
        elif  char == '7':
          doPrintCounters()
        elif(char == '8'):
          doRaiseAlarm()
        elif(char == '9'):
          doClearAlarm()       
        elif(char == '10'):
          doUpdateAlarm()
        elif(char == '11'):
          doShutdown()         
        #HERE I need to catch if ESC pressed            
        elif  char == 'ESC':
          break  

def printDebugingMenu():
       print "\n######################################"
       print "#                MENU                 #"
       print "######################################"
       print "1.  setTraceLevel( traceLevel )"
       print "2.  setTraceDomain()"
       print "3.  PRINT Trace Domain and levels"  
       print "4.  PRINT config"
       print "5.  PRINT profile config"
       print "6.  PRINT mapping config"
       print "7.  PRINT counters"  
       print "8.  Issue Alarm"
       print "9.  Remove Alarm"
       print "10. Update Alarm" 
       print "11. Shutdown" 
       print "EXIT: press ESC"

2 个答案:

答案 0 :(得分:1)

raw_input()不是您所需要的。

您需要逐个字符处理输入,以便您可以检测ESC,功能键等。也许构建您自己的输入函数,当您按ENTER键时返回文本,但会抛出其他键上的异常,但是需要处理退格,光标移动等。您可以在Unices上的curses模块或Windows上的msvcrt中找到基元。这是很多工作。但是,如果您正在编写许多基于控制台的程序,那么您可以使用它并且它是可重用的。

但是,正常情况下,如果用户想要退出程序并且不需要复杂化,那么用户就会非常满意地使用Ctrl-C。如果你想要花哨的东西写一个GUI程序。由你决定。

另一方面,if ... elif ... elif块看起来非常恐怖。看看 this

答案 1 :(得分:0)

我担心要这样做你必须使用curses模块,但我不会建议你使用简单的应用程序。

另请注意,Python中的if/elif切换通常使用dict s。

完成
相关问题