pygame.key.start_text_input()
일단 이벤트로 받는데 그렇기 위해서는 게임 시작때 이것을 실행해야한다
입력 필드 예제:
class InputField:
def __init__(self, size) -> None:
self.image = pygame.Surface(size, pygame.SRCALPHA)
self.image.fill((0, 0, 0, 255))
self.font = pygame.font.SysFont("malgungothic", size[1])
self.text = "" # 글자 원본
self.edit_pos = 0 # 수정하는 위치 / 깜박꺼리는 커서
self.text_edit = False
self.text_editing = "" # 한국어처럼 글자 편집하는 글자
def event(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
self.text = self.text[:self.edit_pos-1] + self.text[self.edit_pos:]
self.edit_pos = max(0, self.edit_pos-1)
elif event.type == pygame.TEXTEDITING:
self.text_edit = True
self.text_editing = event.text
self.text_editing_pos = event.start
elif event.type == pygame.TEXTINPUT:
self.text_edit = False
self.text_editing = ""
self.text = self.text[:self.edit_pos] + event.text + self.text[self.edit_pos:]
self.edit_pos = min(self.edit_pos + len(event.text), len(self.text + self.text_editing))
def render(self, surface):
surface.blit(self.image, self.image.get_rect(topleft=(200, 500)))
string = self.font.render(self.text + self.text_editing, True, (255, 255, 255))
surface.blit(string, string.get_rect(topleft=(200, 500)))
여기서 이벤트 함수를 보면 새로운 타입 pygame.TEXTEDITING, pygame.TEXTINPUT 인데 이걸로 입력을 받는다
pygame.TEXTEDITING 에서는 한국어처럼 모아쓰기 하는 글자는 이게 모아써주고
pygame.TEXTINPUT 은 글자가 입력됬을떄, 풀어쓰기는 글자 입력만하면, 모아쓰기는 글자가 완성되면 실행된다
전체 예시 코드
import pygame
class InputField:
def __init__(self, size) -> None:
self.image = pygame.Surface(size, pygame.SRCALPHA)
self.image.fill((0, 0, 0, 255))
self.font = pygame.font.SysFont("malgungothic", size[1])
self.text = ""
self.edit_pos = 0
self.text_edit = False
self.text_editing = ""
def event(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
self.text = self.text[:self.edit_pos-1] + self.text[self.edit_pos:]
self.edit_pos = max(0, self.edit_pos-1)
elif event.type == pygame.TEXTEDITING:
self.text_edit = True
self.text_editing = event.text
self.text_editing_pos = event.start
elif event.type == pygame.TEXTINPUT:
self.text_edit = False
self.text_editing = ""
self.text = self.text[:self.edit_pos] + event.text + self.text[self.edit_pos:]
self.edit_pos = min(self.edit_pos + len(event.text), len(self.text + self.text_editing))
def render(self, surface):
surface.blit(self.image, self.image.get_rect(topleft=(200, 500)))
string = self.font.render(self.text + self.text_editing, True, (255, 255, 255))
surface.blit(string, string.get_rect(topleft=(200, 500)))
pygame.init()
pygame.key.start_text_input()
screen = pygame.display.set_mode((1000, 800))
input_field = InputField((300, 50))
while True:
screen.fill((100, 0, 50))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
input_field.event(event)
input_field.render(screen)
pygame.display.update()
pygame_phyics 은 InputField 에 깜빡거리는 커서, 줄넘김, 커서 이동 등을 구현함
참고시 github: https://github.com/fireing123/pygame_phyics
GitHub - fireing123/pygame_phyics
Contribute to fireing123/pygame_phyics development by creating an account on GitHub.
github.com
'pygame_phyics' 카테고리의 다른 글
[pygame] 버튼, text 줄넘김 구현 (0) | 2023.11.05 |
---|---|
[pygame_phyics] 기본 오브젝트 예제 & 설명 (0) | 2023.11.02 |
[pygame_phyics] save 소개 & 사용시 GameObject 주의사항 (0) | 2023.10.31 |
pygame phyics 업데이트 (0) | 2023.10.25 |
[pygame_phyics] 라이브러리 소개 (0) | 2023.10.04 |