我想在屏幕上使用python3顯示鍵盤輸入,但這裏有一些代碼問題。Pygame - 鍵盤輸入錯誤 - 多次在屏幕上打印
如果我迅速輸入,字母得到重複。例如:如果我快速輸入
zo
,屏幕輸出爲zozz
,但是如果我輸入緩慢,則輸出zo
shift鍵未按預期工作。例如:如果我按左(或右)移位和
z
,它輸出Z
,但我釋放左移後輸入z
,它仍然輸出Z
,當我按下z
時,它輸出z
。我不知道爲什麼會發生這種情況,因爲我將shift
標誌末尾重置爲0
大寫字母鍵不能按預期工作。一旦我按下capslock,輸出全部爲大寫,但是當我再次按下時,輸出會變成小寫,它仍然是大寫。我知道這裏
capsLock
標誌不起作用,但我無法調試它。
關於如何克服這些問題的任何想法?
import pygame
from pygame.locals import *
pygame.init()
def getch_mod():
inputStr = ''
shift = 0
capsLock = 0
a = 30
screen = pygame.display.set_mode((1000, 1000))
pygame.display.set_caption("Key Press Test")
f1=pygame.font.SysFont("comicsansms",24)
while True:
events = list(pygame.event.get())
for ev in events:
screen.fill((255,255,255))
text = f1.render('Enter password:', True, (0,0,0))
screen.blit(text,(10,10))
text = f1.render(inputStr, True, (0,0,0))
screen.blit(text, (100,a))
if (ev.type == pygame.QUIT):
return
if pygame.key.get_focused():
press = pygame.key.get_pressed()
for i in range(0,len(press)):
if (press[i] == 1):
name = pygame.key.name(i)
if (name == 'left shift' or name == 'right shift'):
shift = 1
break
if (name == 'caps lock'):
if (not capsLock):
capsLock = 1
else:
capsLock = 0
break
if (name != 'return' and name != 'left shift' and name != 'right shift' and name != 'caps lock'):
if (shift or capsLock):
name = name.upper()
inputStr += str(name)
shift = 0
pygame.display.update()
c = getch_mod()
我現在很尷尬。感謝Ted提供了簡短的代碼和pygame的額外信息。我需要讓自己更加適應pygame及其庫函數 –
不需要尷尬。起初可能很難知道這些事情。 –