Я делаю калькулятор с Pygame и хочу проверить, нажал ли пользователь клавишу, которая является целым числом. Если ключ представляет собой целое число, например 1 или 2, выведите число на экран. Я пытался, но много раз, но потерпел неудачу
Вот мой код
import pygame, math
pygame.init()
screen_width = 1200
screen_height = 500
gameWindow = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Calculator')
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
white = (255, 255, 255)
black = (0, 0, 0)
grey = (128, 128, 128)
font = pygame.font.SysFont('comicsans', 40)
fps = 60
clock = pygame.time.Clock()
def text_screen(text, color, x, y):
screen_text = font.render(text, True, color)
gameWindow.blit(screen_text, [x ,y])
def welcome_screen(run):
clock.tick(fps)
gameWindow.fill(grey)
while not run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = True
if event.type == pygame.KEYDOWN:
if event.key == # Code to check whether the key is integer or not:
pass
pygame.display.update()
def gameLoop(run):
clock.tick(fps)
gameWindow.fill(grey)
while not run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = True
pygame.display.update()
if __name__ == "__main__":
welcome_screen(False)
4 ответа
Вы можете преобразовать код клавиши в представляющий символ, а затем проверить, является ли это цифрой с помощью isdigit().
if event.type == pygame.KEYDOWN:
if pygame.key.name(event.key).isdigit():
pass # Do stuff
Вы можете использовать модуль keyboard
и привязать событие нажатия клавиши к функции:
import keyboard # using module keyboard
def myonkeypress(event):
if event.name.isnumeric() :
print('User pressed numeric key')
# hook event handler
keyboard.on_press(myonkeypress)
Я никогда не работал с pygame, но есть встроенная функция Python, которая может вам помочь: isinstance()
. (Документы: https://docs.python.org/3.9/library/functions .html#экземпляр)
Он проверяет, является ли данный объект str
, int
и т. д. Возвращает True
или False
. Это работает следующим образом:
x = 5
if isinstance(x, int):
do_this()
Тем не менее, есть одна загвоздка: хотя я никогда не использовал pygame, я прочитал его документы ( http://www.pygame.org/docs/ref/key.html). В нем говорится следующее:
Целые числа для ключевых констант различаются между pygame 1 и 2. Всегда используйте ключевые константы (K_a), а не целые числа напрямую (97), чтобы ваш код обработки ключей хорошо работал как в pygame 1, так и в pygame 2.
Поэтому я думаю, вам лучше использовать что-то отличное от isinstance()
. Что-то типа:
[...]
def welcome_screen(run):
clock.tick(fps)
gameWindow.fill(grey)
while not run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = True
if event.type == pygame.KEYDOWN:
if event.key in [pygame.K_1, pygame.K_2]:
pass
pygame.display.update()
Чтобы получить числовой ключ, я предлагаю сначала проверить, не была ли нажата никакая модифицирующая клавиша. Например, если мы нажмем SHIFT
+ 1
, в зависимости от вашей клавиатуры, вы, вероятно, получите восклицательный знак (!
), а не реальную цифру 1
.
Для того, чтобы это сделать, а также получить целочисленное значение нажатой клавиши, мы можем сделать следующее:
if event.type == pygame.KEYDOWN:
# Check if no modifier keys are pressed (for example: SHIFT):
if event.mod == pygame.KMOD_NONE:
# event.key returns the ASCII code of the key, we can find out if it is numeric by checking if
# the ASCII value of the key is between the ASCII value of '0' and '9'
if pygame.K_0 <= event.key <= pygame.K_9:
# Store the pressed key into a variable
pressed_digit = event.key - pygame.K_0
# Do something with it
print(f'Key pressed: {pressed_digit}')
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.
key = pygame.key.name(event.key) if key.isdigit(): text_screen(key, (0, 0, 0), 0, 0)
Это не перезапишет последний ключ, поэтому вам нужно найти способ сделать это.