Pygame - Làm việc với văn bản

Category: Pygame

Trong bài viết này, chúng ta sẽ xem cách sử dụng mô-đun Pygame để thao tác với văn bản. Chúng ta sẽ thực hiện việc khởi tạo phông chữ, hiển thị văn bản, chỉnh sửa văn bản bằng bàn phím và thêm chú thích con trỏ nhấp nháy. 

Cài đặt

Để cài đặt mô-đun này, hãy nhập lệnh bên dưới vào terminal.

pip install pygame

Khởi tạo phông chữ

Bây giờ chúng ta có thể tiếp tục với phần khởi tạo phông chữ. Phương thức pygame.font.init() được sử dụng để khởi tạo phông chữ và phương thức pygame.font.get_init() được sử dụng để kiểm tra xem phông chữ đã được khởi tạo hay chưa. Cả hai phương thức đều không yêu cầu bất kỳ đối số nào. Nếu phông chữ đã được khởi tạo thành công, phương thức pygame.font.get_init() trả về true. 

In văn bản trên cửa sổ

Ở đây, chúng ta sẽ xem cách tùy chỉnh phông chữ và văn bản trên màn hình. Chúng ta sẽ thiết lập vị trí hiển thị của văn bản trên màn hình bằng tọa độ x và y. Trước tiên, chúng ta sẽ tạo các tệp phông chữ và sau đó hiển thị văn bản. Hàm screen. blit() được sử dụng để sao chép các đối tượng bề mặt văn bản vào các đối tượng bề mặt hiển thị tại tọa độ trung tâm.

# import pygame
import pygame

# khởi tạo pygame
pygame.font.init()

# kiểm tra xem font đã được khởi tạo
# hay chưa
pygame.font.get_init()

# tạo bề mặt hiển thị (cửa sổ)
display_surface = pygame.display.set_mode((500, 500))

# thay đổi tiêu đề cửa sổ
pygame.display.set_caption('Our Text')

# tạo đối tượng font bằng cách truyền tên font
# và kích thước chữ
font1 = pygame.font.SysFont('freesanbold.ttf', 50)
font2 = pygame.font.SysFont('chalkduster.ttf', 40)

# kết xuất các dòng văn bản mà bạn muốn hiển thị
text1 = font1.render('GeeksForGeeks', True, (0, 255, 0))
text2 = font2.render('GeeksForGeeks', True, (0, 255, 0))

# tạo đối tượng hình chữ nhật cho
# đối tượng surface của văn bản
textRect1 = text1.get_rect()
textRect2 = text2.get_rect()

# đặt vị trí tâm cho dòng văn bản thứ nhất
textRect1.center = (250, 250)

# đặt vị trí tâm cho dòng văn bản thứ hai
textRect2.center = (250, 300)

while True:

    # thêm màu nền bằng giá trị RGB
    display_surface.fill((255, 0, 0))

    # sao chép đối tượng surface chứa văn bản
    # lên bề mặt hiển thị
    # tại tọa độ tâm đã chỉ định.
    display_surface.blit(text1, textRect1)
    display_surface.blit(text2, textRect2)

    # duyệt qua danh sách các đối tượng sự kiện
    # được trả về bởi phương thức pygame.event.get()
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
          
            # tắt thư viện pygame
            pygame.quit()

            # thoát khỏi chương trình
            quit()

        # cập nhật hiển thị
        pygame.display.update()

Đầu ra:

Nhập con trỏ vào cửa sổ

Chúng ta sẽ thêm Ghi chú Con trỏ Nhấp nháy ở đây. Con trỏ của chúng ta sẽ tiếp tục nhấp nháy sau mỗi 0,5 giây. Chúng ta cũng có thể chỉnh sửa văn bản.

# nhập mô-đun pygame
import pygame

# nhập mô-đun time
import time

# khởi tạo mô-đun pygame
pygame.init()

# thiết lập kích thước cửa sổ hiển thị
display_screen = pygame.display.set_mode((500, 500))

# thêm một dòng văn bản
text = 'Hello Guys!!'

# thêm kiểu font mặc định với kích thước
# chữ
font = pygame.font.SysFont(None, 40)

# kết xuất (render) văn bản
img = font.render(text, True, (255, 0, 0))

rect = img.get_rect()
rect.topleft = (20, 20)
cursor = pygame.Rect(rect.topright, (3, rect.height))

running = True

while running:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # phát hiện khi phím được nhấn
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                if len(text) > 0:
                    
                    # lưu văn bản ngoại trừ ký tự cuối cùng
                    text = text[:-1]

            else:
                text += event.unicode
                
            img = font.render(text, True, (255, 0, 0))
            rect.size = img.get_size()
            cursor.topleft = rect.topright

    # thêm màu nền cho cửa sổ hiển thị
    display_screen.fill((200, 255, 200))
    display_screen.blit(img, rect)
    
    # con trỏ sẽ nhấp nháy sau mỗi 0.5 giây
    if time.time() % 1 > 0.5:
        pygame.draw.rect(display_screen, (255, 0, 0), cursor)
        
    # cập nhật hiển thị
    pygame.display.update()

pygame.quit()

Đầu ra:

Hộp nhập liệu trên cửa sổ

Ở đây chúng ta sẽ xem cách đọc văn bản bằng bàn phím trong PyGame. Chúng ta sẽ hiển thị văn bản bên trong một hình chữ nhật. Khi di chuột vào hình chữ nhật, màu của hình chữ nhật sẽ thay đổi. Chú thích đã được thêm vào mã để dễ hiểu hơn. 

# nhập mô-đun pygame
import pygame

# nhập thư viện sys
import sys

# khởi tạo pygame
pygame.init()

clock = pygame.time.Clock()

# thiết lập kích thước cửa sổ hiển thị
display_screen = pygame.display.set_mode((500, 500))

# thêm kiểu font và kích thước
base_font = pygame.font.Font(None, 40)

# lưu trữ văn bản được nhập từ bàn phím
user_text = ''

# thiết lập tọa độ trái, trên, rộng, cao trong 
# Pygame.Rect()
input_rect = pygame.Rect(200, 200, 140, 32)
color_active = pygame.Color("lightskyblue")
color_passive = pygame.Color("gray15")
color = color_passive

active = False

while True:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        # khi chuột chạm vào hình chữ nhật,
        # đặt biến active thành True
        if event.type == pygame.MOUSEBUTTONDOWN:
            if input_rect.collidepoint(event.pos):
                active = True

        # nếu một phím được nhấn
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                
                # lưu văn bản trừ ký tự cuối cùng
                user_text = user_text[0:-1]
            else:
                user_text += event.unicode

    # tô màu nền cửa sổ hiển thị
    display_screen.fill((0, 0, 0))

    # thay đổi màu nếu ô nhập đang được chọn
    if active:
        color = color_active
    else:
        color = color_passive

    # vẽ hình chữ nhật (ô nhập)
    pygame.draw.rect(display_screen, color, input_rect)
    
    # render (kết xuất) văn bản
    text_surface = base_font.render(user_text, True, (255, 255, 255))
    display_screen.blit(text_surface, (input_rect.x + 5, input_rect.y + 5))

    # điều chỉnh chiều rộng của ô nhập dựa trên độ dài văn bản
    input_rect.w = max(100, text_surface.get_width() + 10)

    # cập nhật màn hình
    pygame.display.flip()
    clock.tick(60)

Đầu ra:

Published on Jul 28, 2025

Related Posts