2015-10-23 86 views
0

我想創建一個逐行讀取文本文本文本的程序。對於前3行,用戶只需按Enter即可前進到下一行。然而,對於第四行,他們需要按一個特定的鍵(在這種情況下字母「u」)。我嘗試使用getch()來做這件事,但由於某種原因,按下「u」鍵不會產生任何響應。下面是代碼:獲取python響應特定的按鍵

from os import path 
from msvcrt import getch 
trial = 1 
while trial < 5: 
    p = path.join("C:/Users/Work/Desktop/Scripts/Cogex/item", '%d.txt') % trial 
    c_item = open(p) 
    print (c_item.readline()) 
    input() 
    print (c_item.readline()) 
    input() 
    print (c_item.readline()) 
    input() 
    print (c_item.readline()) 
    if ord(getch()) == 85: 
     print (c_item.readline()) 
     input() 
trial += 1 

我也看到了有關使用pygame的或Tkinter的人,但我不知道是否有可能使用這些無需程序中使用的圖形界面。提前致謝!

+0

您是否按Enter鍵輸入'u'後輸入y?您正在使用的終端可能不會將緩衝輸入提供給程序,直到按下Enter鍵。沒有簡單的GUI就沒有簡單的方法來解決這個問題,因爲它是終端的行爲,而不是你的應用程序。 –

+0

感謝您的建議。是的,我在輸入'u'後按下回車鍵。我可能會選擇圖形用戶界面(GUI)選項......它最終更直接。 – Aziggy

回答

-1

問題在於,大多數現代ttys的輸入被緩衝 - 只有在按下回車鍵時它纔會發送到應用程序。你也可以在C中測試它。如果你創建一個直接從操作系統獲得其鍵盤數據的GUI應用程序,那麼是的,你可以這樣做。但是,這可能會比請求用戶在按下u後打印輸入鍵更麻煩。 例如:

result = input() 
if result == 'u': 
    print(c_item.readline()) 
    input() 
+0

這是不正確的。 – TigerhawkT3

+0

嗯,它適用於我。感謝威廉! – Aziggy

0

85是資本'U'序。對於小寫'u',您需要序號117

if ord(getch()) == 117: 

你也可以簡單地檢查字符是否爲b'u'

if getch() == b'u': 

或者你可以做的順序不區分大小寫的檢查:

if ord(getch()) in (85, 117): 

或爲字符串:

if getch().lower() == b'u' 

您還需要移動trial += 1進入循環:

if getch().lower() == b'u': 
    print (c_item.readline()) 
    input() 
trial += 1 
+0

非常感謝您的建議!但是,這仍然不能解決問題......我嘗試了你所描述的所有方法,並且我仍然無法讓Python對大寫或小寫'u'做出響應。如果您有任何其他想法,我很樂意聽到他們 – Aziggy