2010-04-19 3 views
2

У меня есть программа Pygame, которая нуждается в текстовом вводе. То, как это делается, - это получить ввод с клавиатуры, и когда нажата клавиша, он отображает этот ключ, чтобы он был добавлен на экран. По сути, он действует как текстовое поле. Проблема в том, что когда вы выполняете смену, это ничего не делает. Я понимаю, что это связано с тем, что программа игнорирует ввод сдвига и вместо этого записывает текст, если его число меньше 128. Я подумал об установке переменной, когда сдвиг нажат, а затем заглавную, если это правда, но строковая заглавная буква только на букву, а не на вещи числа или точки с запятой. Может быть, число, которое я могу добавить к номеру ASCII, введенному для его изменения, если нажать shift или что-то еще?
Редактировать:
По существу, я просто хочу знать, есть ли число, добавляемое к символам ascii, чтобы было похоже, что они были напечатаны с нажатой сменой. После прочтения моего первоначального вопроса это показалось немного неясным.Pygame программа, которая может получить ввод с клавиатуры с колпачками

+1

'Число добавление символов ASCII' является '32'. Добавление '32' в' 'a'' даст вам' 'A''. Тем не менее, вы все равно должны попытаться заставить ваш ключ переключения работать. Pygame довольно хорошо распознает модифицирующие ключи. Это настоящая проблема, которую вы должны решить. –

+0

Это не имеет ничего общего с моим ключом. Я думаю, что у pygame нет «pygame.K_A», достаточно только «pygame.K_a», если это так. Он не распознает сдвиг при нажатии. Я это точно знаю. – None

+0

Я был неправ. Извините Ксавье. Я не знал об атрибуте event.unicode. Знайте, что я делаю, все работает нормально. – None

ответ

3

Я могу использовать атрибут event.unicode, чтобы получить значение введенного ключа.

0

Похоже, что вычитание 32 должно получить вас, что вы хотите, глядя на ASCII table. Убедитесь, что вы действительно имеете дело с строчными буквами, хотя, или вы получите некоторые странные символы. Я не уверен, что вы имеете в виду, что капитализация работает только на письма:

>>> '1234;[email protected]#abcd'.upper() 
'1234;[email protected]#ABCD' 
+0

В вашем примере изменены только символы abcd. Это то, что я имел в виду. – None

+0

Я пробовал это, и он работал для писем, но это не то, что я хотел, потому что он придумал странные персонажи, когда было напечатано что-то еще. Я хочу преобразование, которое действует как клавиша смены при изменении букв. Есть ли способ получить это? – None

+0

Например, вот некоторые псевдо-код: если ключ <= 127: если не смещаться: текст + = CHR (ключ) еще: текст + = CHR (сдвиг (ключ)) – None

0

Я написал функцию, которая преобразует строки после получения не достаточной помощи. Он преобразует все вручную.

+0

Мне не нужна эта функция, так как теперь я знаю об атрибуте unicode класса pygame Event. – None

1

Добавление этого класса в ваш код должно сделать трюк. Чтобы получить символ, который пользователь нажимает, вызывается функция 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 
0

В этом вопросе я копаю. Каждое событие клавиатуры в 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)