Draw line, rectangle, circle, polygon, ellipse 그리기 > Pygame - python GUI module

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

Draw line, rectangle, circle, polygon, ellipse 그리기

페이지정보

글쓴이 관리자 조회 33,057 조회 날짜 20-02-27 15:52 / Update:20-02-27 21:38
댓글 0 댓글

SNS 공유

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

내용

Draw line, rectangle, circle, polygon, ellipse  그리기

 

 

pygame의 draw 모듈을 이용하여 다양한 도형을 그릴 수 있다.

draw에 의해 생성되는 모형은 모두 Rect이다. 따라서 Rect의 가상 속성값을 모두 가지고 있다.

참고 : https://www.jbmpa.com/pygame/4

 

 

* SCREEN은 본 강좌에서 사용하는 Surface이다. 그리고 색상 상수는 아래처럼 미리 선언한다고 가정한다.

 

BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN= (0, 255, 0)
BLUE = (0, 0, 255)

 

 

 

1. 선 그리기(line)

 

pygame.draw.line(SCREEN, color, start_pos, end_pos, width=1) -> Rect

 

line() 메서드는 출발점에서 도착점까지 선을 그어준다.

width를 명시하지 않으면 굵기는 1이 된다.

좌표값은 튜플 또는 리스트로 입력가능하다.

 

예제 코드

pygame.draw.line(SCREEN, RED, (100, 50), (200, 150), 5)
pygame.draw.line(SCREEN, GREEN, [200, 300], [100, 150], 10)
pygame.draw.line(SCREEN, BLUE, [300, 300], [200, 250])

 

2921044682_1582846187.3533.png

 

 

 

2. 여러 개의 선 그리기

 

pygame.draw.lines(SCREEN, color, closed, points, width=1) -> Rect

 

lines() 메서드는 입력한 여러 개의 좌표를 순서대로 이어준다. 여러 개의 좌표(points)는 튜플 또는 리스트로 작성한다.

closed 속성을 True로 하면 첫좌표와 끝좌표가 이어져서 하나의 닫힌 도형이 되고, False로 하면 끝좌표는 서로 이어지지 않아 열린 도형이 된다.

 

예제 코드

pygame.draw.lines(SCREEN, RED, False, [(100, 80), (150, 90), (200, 80), (220, 30)], 5)
pygame.draw.lines(SCREEN, BLUE, True, [[50, 380], [350, 190], [200, 180], [150, 130]], 5)

 

2921044682_1582846195.8561.png

 

 

 

3. 부드러운 선 그리기

 

pygame.draw.aaline(SCREEN, color, start_pos, end_pos, blend=1) -> Rect

 

부드러운 선 그리기는 안티알리어싱을 적용한 선그리기이다. blend가 1 또는 True이면 안티알리어싱이 적용되고 0 또는 False이면 알리어싱이 적용된다. 안티알리어싱이 적용되면 pixel에 blur bit이 적용되어 선이 부드럽게 보인다.

aaline()은 선 굵기가 1만 적용된다.

 

예제 코드

pygame.draw.aaline(SCREEN, BLUE, (100, 150), (150, 180), False)
pygame.draw.aaline(SCREEN, BLACK, [50, 400], [350, 280], True)

 

2921044682_1582846204.5202.png

 

 

 

4. 여러 개의 부드러운 선 그리기

 

pygame.draw.aaline(SCREEN, color, closed, points, blend=1) -> Rect

 

여러 개의 선 그리기와 마찬가지로 여러 개의 좌표를 순서대로 이어준다. 

 

예제 코드

pygame.draw.aalines(SCREEN, RED, False, [(80, 480), (250, 390), (270, 380), (220, 130)], True)
pygame.draw.aalines(SCREEN, BLACK, True, [[150, 380], [190, 150], [370, 380], [390, 150]], True)

 

2921044682_1582846217.5914.png

 

 

 

5. 사각형 그리기

 

pygame.draw.rect(SCREEN, color, rect, width=0) -> Rect

 

rect() 메서드는 Rect를 통해 topleft 좌표를 기준으로 가로, 세로 길이를 가진 사각형을 그린다. width는 선의 굵기이며, width 값이 0이 되면 도형 안을 같은 color로 채워준다.

 

예제 코드

pygame.draw.rect(SCREEN, BLACK, (55, 50, 250, 120), 2)
pygame.draw.rect(SCREEN, RED, [55, 210, 250, 220])

 

2921044682_1582846230.1817.png

 

 

 

6. 다각형 그리기

 

pygame.draw.polygon(surface, color, points, width=0) -> Rect

 

polygon()메서드는 여러개의 선 그리기와 마찬가지로 poinsts를 순서대로 이어주는 도형을 만든다. width가 0이면 도형 안을 color로 채워준다.

 

예제 코드

pygame.draw.polygon(SCREEN, RED, [(200, 50), (150, 100), (250, 100)])
pygame.draw.polygon(SCREEN, BLACK, [[150, 150], [10, 200], [100, 300], [350, 250], [300, 200]], 5)

 

2921044682_1582846531.5173.png

 

 

 

7. 원 그리기

 

pygame.draw.circle(surface, color, center, radius, width=0) -> Rect

 

circle() 메서드는 중심점과 반지름을 통해 원을 그려준다.

 

예제 코드

pygame.draw.circle(SCREEN, RED, (100, 50), 40, 3)
pygame.draw.circle(SCREEN, BLUE, [60, 100], 40)
pygame.draw.circle(SCREEN, GREEN, [200, 250], 70)

 

2921044682_1582846681.0015.png

 

 

 

8. 타원 그리기

 

pygame.draw.ellipse(surface, color, rect, width=0) -> Rect

 

타원 그리기는 원 그리기와 원리가 다르다. 원은 중심점과 반지름을 통해 만들어지지만 타원은 사각형을 만들고, 그 사각형의 각 변에 닿는 원을 그린다. 따라서 argument로 rect값이 필요하다. 만약 rect가 정사각형이라면 타원은 원과 같아 진다.

 

예제 코드

pygame.draw.ellipse(SCREEN, RED, (100, 100, 150, 20), 2)
pygame.draw.ellipse(SCREEN, GREEN, [100, 150, 150, 70])
pygame.draw.ellipse(SCREEN, BLACK, [100, 300, 150, 150])

 

2921044682_1582847054.4046.png

 

 

예제 코드 - 사각형 추가

pygame.draw.ellipse(SCREEN, RED, (100, 100, 150, 20), 2)
pygame.draw.ellipse(SCREEN, GREEN, [100, 150, 150, 70])

pygame.draw.ellipse(SCREEN, BLACK, [100, 300, 150, 150])
pygame.draw.rect(SCREEN, RED, [100, 300, 150, 150], 2)

 

2921044682_1582847817.7959.png

 

 

 

9. 전체 코드 예제 - 모두 주석처리하고 필요한 부분만 주석 해제하여 확인하면 된다.

 

import pygame

 

# 색상 상수

BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN= (0, 255, 0)
BLUE = (0, 0, 255)

 

# 스크린 전체 크기 지정

SCREEN_WIDTH = 400
SCREEN_HEIGHT  = 500

 

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(WHITE)

 

    # 1. 선그리기 - 출발 x, y / 도착 x, y / 굵기
    pygame.draw.line(SCREEN, RED, (100, 50), (200, 150), 5)
    pygame.draw.line(SCREEN, GREEN, [200, 300], [100, 150], 10)
    pygame.draw.line(SCREEN, BLUE, [300, 300], [200, 250])

 

    # 2. 여러 개의 선 그리기 - False 열린 도형, True 닫힌 도형
    pygame.draw.lines(SCREEN, RED, False, [(100, 80), (150, 90), (200, 80), (220, 30)], 5)
    pygame.draw.lines(SCREEN, BLUE, True, [[50, 380], [350, 190], [200, 180], [150, 130]], 5)

 

    # 3. 부드러운 선 그리기 - True 안티 알리어싱
    pygame.draw.aaline(SCREEN, BLUE, (100, 150), (150, 180), False)
    pygame.draw.aaline(SCREEN, BLACK, [50, 400], [350, 280], True)

 

    # 4. 부드러운 선 여러개 - 선 굵기는 기본 1
    pygame.draw.aalines(SCREEN, RED, False, [(80, 480), (250, 390), (270, 380), (220, 130)], True)
    pygame.draw.aalines(SCREEN, BLACK, True, [[150, 380], [190, 150], [370, 380], [390, 150]], True)

 

    # 5. 사각형 그리기 - (x, y, width, height), 선굵기
    pygame.draw.rect(SCREEN, BLACK, (55, 50, 250, 120), 2)
    pygame.draw.rect(SCREEN, RED, [55, 210, 250, 220])

 

    # 6. 다각형 - x, y 좌표를 연결해줌
    pygame.draw.polygon(SCREEN, RED, [[200, 50], [150, 100], [250, 100]])
    pygame.draw.polygon(SCREEN, BLACK, [[150, 150], [10, 200], [100, 300], [350, 250], [300, 200]], 5)

 

    # 7. 원 그리기 - 색상, 중심점, 반지름, 선굵기( 없으면 꽉 채움, 0)
    pygame.draw.circle(SCREEN, RED, [100, 50], 40, 3)
    pygame.draw.circle(SCREEN, BLUE, [60, 100], 40)
    pygame.draw.circle(SCREEN, GREEN, [200, 250], 70)

 

    # 8. 타원 - 사각형을 그려주면 그 안에 타원이 들어감(x, y, width, height)
    pygame.draw.ellipse(SCREEN, RED, [100, 100, 150, 20], 2)
    pygame.draw.ellipse(SCREEN, GREEN, [100, 150, 150, 70])
    pygame.draw.ellipse(SCREEN, BLACK, [100, 300, 150, 150])
    pygame.draw.rect(SCREEN, RED, [100, 300, 150, 150], 2)

 

    font_01 = pygame.font.SysFont("Arial", 30, True, False)

    text_title = font_01.render("Pygame draw test", True, BLACK)
    SCREEN.blit(text_title, [10, 10])

 

    pygame.display.flip()

       


    # 1초에 60번의 빈도로 순환하기
    clock.tick(60)

 

 

2921044682_1582848305.4496.png

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 53019 02-21
2 관리자 29392 02-21
3 관리자 36659 02-21
4 관리자 39902 02-22
5 관리자 43906 02-22
6 관리자 38755 02-22
7 관리자 33254 02-22
8 관리자 33961 02-22
9 관리자 35090 02-23
10 관리자 40784 02-24
11 관리자 29745 02-25
열람중 관리자 33058 02-27
13 관리자 27601 03-05
14 관리자 33853 03-10
15 관리자 21799 03-10
16 관리자 26930 03-11
17 관리자 20863 03-11
18 관리자 23749 03-11
19 관리자 26095 03-11
20 관리자 28054 03-11
21 관리자 29420 04-05
22 관리자 23219 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.