Text를 화면에 표현하기 > Pygame - python GUI module

본문 바로가기

사이트 내 전체검색

이전으로Pygame - python GUI module

Text를 화면에 표현하기

페이지정보

글쓴이 관리자 조회 40,645 조회 날짜 20-02-23 00:23 / U:20-02-23 00:48
댓글 0댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

내용

Text를 화면에 표현하기

 

 

이번 강좌에서는 Text를 SCREEN안에 표현해보는 것을 알아본다.

 

pygame안에서 객체를 SCREEN안에 보여주기 위해서는 Surface 객체로 변환해야 한다.

이미지 역시 pygame.image.load() 하는 순간 Surface 객체로 변환되어서 저장된다.

 

따라서 Text도 Surface 객체로 변환 후, SCREEN 안에 blit 하여 복사해준다.

 

Text를 Surface 객체로 변환하기 위해서는 다음 순서로 진행한다.

 

1) 시스템의 폰트로부터 Font 객체를 생성한다.

2) 생성된 Font 객체를 통해 Text를 새로운 Surface 객체로 그려준다.

3) 생성된 Surface 객체를 SCREEN에 blit 해준다.

 

 

 

1. Font 객체 생성

 

시스템의 폰트로 부터 Font 객체를 생성하는 메서드는 SysFont() 이다.

형식은 아래와 같다.

 

pygame.font.SysFont( font name, size, bold=False, italic=False)

 

Sysfont() 메서드를 통해 Font 객체를 생성하여 저장한다.

 

myFont = pygame.font.SysFont( "arial", 30, True, False)

 

 

시스템 폰트를 사용하지 않고, font file로 부터 폰트 객체를 생성하려면 Font() 메서드를 사용한다.

 

pygame.font.Font(font filename, size)

 

myFont = pygame.font.Font( "Font.ttf", 30)

 

default 시스템 폰트를 사용하려면 font filename을 "None"으로 한다.

 

myFont = pygame.font.Font( None, 30)

 

 

만약, 시스템 폰트의 이름을 모른다면 get_fonts()를 통해 시스템의 모든 폰트 이름을 확인할 수 있다.

 

print( pygame.font.get_fonts() )

 

결과

['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambriacambriamath', 'cambria', 'candara', 'comicsansms', 'consolas', 'constantia', 'corbel', 'couriernew', 'ebrima', 'franklingothicmedium', 'gabriola', 'gadugi', 'georgia', 'impact', 'inkfree', 'javanesetext',

..........

..........

'hcrdotumext', 'hcrbatang', 'hcrbatangext', 'hcrbatangextb', 'hyhwpeq', 'hancomeqn', 'newjumja', 'hancomgothic', 'hancomgothicregular', 'haanwing2', 'hansantteutdotumregular', 'hansantteutdotum', '한컴산뜻돋움', '한컴산뜻돋움regular']

 

 

 

2. Surface 객체에 Text 쓰기

 

Font 객체는 render() 메서드를 통해, Text를 Surface 객체에 그려준다.

형식은 아래와 같다.

 

render(Text, antialias, color, background=None)

 

render() 메서드를 통해 Text를 Surface 객체로 생성한다.

 

BLACK = ( 0, 0, 0 )

text_Title= myFont.render("Pygame Text Test", True, BLACK)

 

# 안티알리아싱은 선을 그릴때, 픽셀사이에 blur bit를 사용하여 선을 부드럽게 만드는 그래픽 기법이다.

만약 안티알리아싱을 하지 않으면 글자의 선이 매우 투박하게 나타난다.

 

 

 

3. 생성된 Text Surface를 SCREEN에 blit() 하기

 

Text Surface를 SCREEN에 blit()하는 것은 Image를 표시할 때, 사용한 것과 같다.

형식은 아래와 같다.

 

SCREEN.blit(text_Title, 좌표)

 

SCREEN.blit(text_Title, [200, 300])

 

모든 Surface는 Rect 객체를 가질 수 있다.

만약 Text_Title을 SCREEN의 가운데에 위치하고 싶다면, Image와 마찬가지로 Rect 객체를 이용할 수 있다.

 

text_Rect = text_Title.get_rect()

 

text_Rect.centerx = round(SCREEN_WIDTH / 2)

text_Rect.y = 50

 

SCREEN.blit(text_Title, text_Rect)

 

 

 

4. Text 표현하기 전체 코드

 

import pygame

 

# 스크린 전체 크기 지정

SCREEN_WIDTH = 400
SCREEN_HEIGHT  = 500

 

# 색상 상수

BLACK = (0, 0, 0)

 

# pygame 초기화

pygame.init()

 

# 스크린 객체 저장
SCREEN = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("pygame test")

 

# FPS를 위한 Clock 생성
clock = pygame.time.Clock()

 

playing = True
while playing:

    # 이벤트 처리
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            playing = False
            pygame.quit()

 

       

    # 스크린 배경색 칠하기

    SCREEN.fill((255, 255, 255))

 

    # Font 객체 생성

    myFont = pygame.font.SysFont( "arial", 30, True, False)

 

    # Text를 surface에 그리기, 안티알리어싱, 검은색

    text_Title= myFont.render("Pygame Text Test", True, BLACK)

 

    # Rect 생성

    text_Rect = text_Title.get_rect()

 

    # 가로 가운데, 세로 50 위치

    text_Rect.centerx = round(SCREEN_WIDTH / 2)

    text_Rect.y = 50

 

    # Text Surface SCREEN에 복사하기, Rect 사용

    SCREEN.blit(text_Title, text_Rect)

 

    # Text를 surface에 그리기, 알리어싱, 검은색

    text_Title2= myFont.render("Pygame Text Test 2", True, BLACK)

 

    # Text Surface SCREEN에 복사하기, 좌표 사용

    SCREEN.blit(text_Title2, [50, 200])

 

    # 작업한 스크린의 내용을 갱신하기

    pygame.display.flip()

 

    # 1초에 60번의 빈도로 순환하기

    clock.tick(60)
 

 

 

실행 결과

 

안티알리아싱이 적용된 Text와  알리아싱이 적용된 Text의 차이점과

Text도 render()를 통해 Surface 객체에 그려져 이미지처럼 Rect를 사용할 수 있다는 것을 알아둔다.

 

2921044682_1582443556.0811.png

댓글목록

댓글이 없습니다

게시물 검색
총 22 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기