У меня есть программа Pygame, которой требуется ввод текста. Это делается для того, чтобы получить ввод с клавиатуры, и при нажатии клавиши он отображает эту клавишу, поэтому она добавляется на экран. По сути, он действует как текстовое поле. Проблема в том, что когда вы держите Shift, он ничего не делает. Я понимаю, что это связано с тем, что программа игнорирует ввод сдвига и вместо этого записывает текст, если его число меньше 128. Я думал установить переменную при нажатии сдвига, а затем использовать заглавные буквы, если это было правдой, но капитализация строк работает только с буквами, а не с вещами как числа или точки с запятой. Может быть, есть число, которое я могу добавить к введенному номеру ASCII, чтобы изменить его, если нажат Shift, или что-то еще?
Редактировать:
По сути, я просто хочу знать, если есть число, которое нужно добавить к символам ascii, чтобы казалось, что они были напечатаны с зажатым сдвигом. После прочтения моего первоначального вопроса он показался немного неясным.
Программа Pygame, которая может вводить ввод с клавиатуры с помощью заглавных букв
Ответы (5)
Я могу использовать атрибут event.unicode, чтобы получить значение введенного ключа.
Добавление этого класса в ваш код должно помочь. Чтобы получить символ, который нажимает пользователь, вызовите функцию getCharacter из класса. Вы можете изменить оператор if keyPress >= 32 и keyPress ‹= 126:, чтобы разрешить небуквенным символам работать со сдвигом.
# The pygame module itself...
import pygame
class controls:
def getKeyPress(self):
for event in pygame.event.get():
if event.type == KEYDOWN:
return event.key
else:
return False
def getCharacter(self):
# Check to see if the player has inputed a command
keyinput = pygame.key.get_pressed()
character = "NULL"
# Get all "Events" that have occurred.
pygame.event.pump()
keyPress = self.getKeyPress()
#If the user presses a key on the keyboard then get the character
if keyPress >= 32 and keyPress <= 126:
#If the user presses the shift key while pressing another character then capitalise it
if keyinput[K_LSHIFT]:
keyPress -= 32
character = chr(keyPress)
return character
копаюсь в этом вопросе. Каждое событие клавиатуры в pygame имеет не только скан-код, но и представление в юникоде. Которые не только позволяют вводить заглавные буквы, но и поддерживают многоязычную клавиатуру с переключением языка.
Вот простой пример ввода/вывода для pygame:
#!/usr/bin/python
import pygame
pygame.init()
screen_size=(800,60)
disp=pygame.display.set_mode(screen_size, pygame.DOUBLEBUF)
msg=u""
clock=pygame.time.Clock()
default_font=pygame.font.get_default_font()
font=pygame.font.SysFont(default_font,16)
disp.fill((240,240,240,255))
pygame.display.flip()
while(not pygame.event.pump()):
for event in pygame.event.get():
print event
if event.type == pygame.QUIT:
pygame.quit()
break
if event.type == pygame.KEYDOWN:
msg+=event.unicode
disp.fill((240,240,240,255))
disp.blit(font.render(msg,True,(30,30,30,255)),(0,0))
pygame.display.flip()
clock.tick(24)
Похоже, что вычитание 32 должно дать вам то, что вы хотите, глядя на таблицу ASCII. Сначала убедитесь, что вы действительно имеете дело со строчной буквой, иначе вы получите странные символы. Я не уверен, что вы имеете в виду, что заглавные буквы работают только с буквами:
>>> '1234;!@#abcd'.upper()
'1234;!@#ABCD'
Я написал функцию, которая преобразует строки после недостаточной помощи. Он конвертирует все вручную.
32
. Добавление32
к'a'
даст вам'A'
. Тем не менее, вы все равно должны попытаться заставить свою клавишу Shift работать. Pygame довольно хорошо распознает изменяющие ключи. Это реальная проблема, которую вы должны решить. - person Xavier Ho   schedule 22.04.2010