如何使用 python 獲取用戶鍵盤輸入并列印該鍵的名稱?
例如:
用戶單擊“SPACE”,輸出為“SPACE” 用戶單擊“CTRL”,輸出為“CTRL”。
為了更好地理解我正在使用 pygame 庫。我為我的游戲構建了設定控制器。它作業正常,但我只能在我的字典上使用鍵。我不知道如何添加其他鍵盤鍵。
見示例:
class KeyboardSettings():
def __init__(self,y,description,keyboard):
self.x = 200
self.rect = pygame.Rect(self.x,y,100,30)
self.description = description
self.color = color_passive
self.keyboard = keyboard
self.active = False
self.default = keyboard
self.error_key = False
def draw(self,screen,x_fix,y_fix):
fixed_rect = self.rect.move(x_fix,y_fix)
pos = pygame.mouse.get_pos()
# Draw rect for user keyboard input
pygame.draw.rect(screen,self.color,self.rect,0,2,2,2,2)
pygame.draw.rect(screen,(100,100,255),self.rect,2,2,2,2,2)
pygame.draw.rect(screen,BLUE,self.rect,1,2,2,2,2)
# Change color if user clicked on that rect. if so...
# Activate object for change by user keyboard
if fixed_rect.collidepoint((pos)):
pygame.draw.rect(screen,(20,20,230),self.rect,2,2,2,2,2)
if pygame.mouse.get_pressed()[0]:
self.color = color_active#pygame.Color('lightskyblue3')
self.active = True
elif pygame.mouse.get_pressed()[0]:
self.color = color_passive#pygame.Color('chartreuse4')
self.active = False
#key_text : BTN DESCRIPTIONS
#key_keyboard : BTN (by user input).... this attribute called from lst "KEYS_DESCRIPTION"
description_text = base_font.render(self.description, True, (25, 25, 25))
keyboard_text = base_font.render(self.keyboard, True, (5, 5, 255))
screen.blit(description_text, (20, self.rect.y 5))
screen.blit(keyboard_text, (20 self.rect.w 120, self.rect.y 2))
if self.error_key:
error_time_check = (pygame.time.get_ticks() - start_ticks_key_error)/ 1000
NA_KEY = base_font2.render('N/A Key', True, (25, 25, 255))
screen.blit(NA_KEY, (110 self.rect.x, self.rect.y 7))
if error_time_check > 1:
self.error_key = False
這是班級。在我的腳本中,我將所有相關物件加載到該類。相關的物件是游戲中的可選鍵。
例如
SHOOT1 = KeyboardSettings(100,"SHOOT","q")
move_right = KeyboardSettings(100,"move_right","d")
#and more keys
key_obj_lst = [SHOOT1,move_right....]
#also i built a dict a-z, 0,9
dict_key = { 'a' : pygame.K_a,
'b' : pygame.K_b,
'c' : pygame.K_c,
...
'z' : pygame.K_z,
'0' : pygame.K_0,
...
'1' : pygame.K_1,
'9' : pygame.K_9,
然后在游戲回圈中:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
for k in key_obj_lst:
#define each key by user
if k.active:
k.keyboard = event.unicode
default = False
if k.keyboard in dict_key:
if event.key == dict_key[k.keyboard]:
if k.description == 'Moving Right':
moving_right = True
if k.description == 'SHOOT':
SHOOT = True
該代碼運行良好,但我真的不知道如何添加不是字母和數字的鍵,例如“ENTER”、“SPACE”等。
uj5u.com熱心網友回復:
pygame 提供了一個獲取按鍵名稱的函式:
pygame.key.name
因此您可以使用它來獲取密鑰的名稱,因此無需為此使用字典:
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 400))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
key_name = pygame.key.name(event.key)
print(key_name)
uj5u.com熱心網友回復:
pip install keyboard
import keyboard #use keyboard module
while True:
if keyboard.is_pressed('SPACE'):
print('You pressed SPACE!')
break
elif keyboard.is_pressed("ENTER"):
print("You pressed ENTER.")
break
uj5u.com熱心網友回復:
使用keyboard模塊
import keyboard
while True:
print(f"You pressed {keyboard.get_hotkey_name()})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/390991.html
