У меня есть программа Pygame, которая нуждается в текстовом вводе. То, как это делается, - это получить ввод с клавиатуры, и когда нажата клавиша, он отображает этот ключ, чтобы он был добавлен на экран. По сути, он действует как текстовое поле. Проблема в том, что когда вы выполняете смену, это ничего не делает. Я понимаю, что это связано с тем, что программа игнорирует ввод сдвига и вместо этого записывает текст, если его число меньше 128. Я подумал об установке переменной, когда сдвиг нажат, а затем заглавную, если это правда, но строковая заглавная буква только на букву, а не на вещи числа или точки с запятой. Может быть, число, которое я могу добавить к номеру ASCII, введенному для его изменения, если нажать shift или что-то еще?
Редактировать:
По существу, я просто хочу знать, есть ли число, добавляемое к символам ascii, чтобы было похоже, что они были напечатаны с нажатой сменой. После прочтения моего первоначального вопроса это показалось немного неясным.Pygame программа, которая может получить ввод с клавиатуры с колпачками
ответ
Я могу использовать атрибут event.unicode, чтобы получить значение введенного ключа.
Похоже, что вычитание 32 должно получить вас, что вы хотите, глядя на ASCII table. Убедитесь, что вы действительно имеете дело с строчными буквами, хотя, или вы получите некоторые странные символы. Я не уверен, что вы имеете в виду, что капитализация работает только на письма:
>>> '1234;[email protected]#abcd'.upper()
'1234;[email protected]#ABCD'
В вашем примере изменены только символы abcd. Это то, что я имел в виду. – None
Я пробовал это, и он работал для писем, но это не то, что я хотел, потому что он придумал странные персонажи, когда было напечатано что-то еще. Я хочу преобразование, которое действует как клавиша смены при изменении букв. Есть ли способ получить это? – None
Например, вот некоторые псевдо-код: если ключ <= 127: если не смещаться: текст + = CHR (ключ) еще: текст + = CHR (сдвиг (ключ)) – None
Я написал функцию, которая преобразует строки после получения не достаточной помощи. Он преобразует все вручную.
Мне не нужна эта функция, так как теперь я знаю об атрибуте unicode класса pygame Event. – None
Добавление этого класса в ваш код должно сделать трюк. Чтобы получить символ, который пользователь нажимает, вызывается функция 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 имеет не только scancode, но и представление unicode. Что не только позволяет вводить заглавные буквы, но и уважает многоязычные клавиатуры с языковым переключателем.
Здесь просто 'вход/печати' пример для 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)
'Число добавление символов ASCII' является '32'. Добавление '32' в' 'a'' даст вам' 'A''. Тем не менее, вы все равно должны попытаться заставить ваш ключ переключения работать. Pygame довольно хорошо распознает модифицирующие ключи. Это настоящая проблема, которую вы должны решить. –
Это не имеет ничего общего с моим ключом. Я думаю, что у pygame нет «pygame.K_A», достаточно только «pygame.K_a», если это так. Он не распознает сдвиг при нажатии. Я это точно знаю. – None
Я был неправ. Извините Ксавье. Я не знал об атрибуте event.unicode. Знайте, что я делаю, все работает нормально. – None