Как сделать выделение текста в пайгейм?

У меня есть в пайгейм окно с каким-то текстом, как сделать так, чтобы этот текст можно было выделять курсором и копировать?


Ответы (1 шт):

Автор решения: Fox Fox

Для того чтобы выделять текст курсором и копировать его в Pygame, Вам нужно будет реализовать функциональность выделения текста и буфера обмена вручную, так как Pygame не предоставляет встроенных средств для этого. Используйте библиотеку pyperclip для копирования текста в буфер обмена. Пример простейшей реализации, если нужен:

import pygame
import pyperclip

pygame.init()

# Параметры окна
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Text Selection Example")

# Цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)

# Шрифт
font = pygame.font.Font(None, 36)

# Текст
text = "Выделите этот текст и скопируйте его."
text_surface = font.render(text, True, BLACK)
text_rect = text_surface.get_rect(topleft=(50, 50))

# Переменные для выделения текста
selecting = False
start_pos = None
end_pos = None

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if text_rect.collidepoint(event.pos):
                selecting = True
                start_pos = event.pos
        elif event.type == pygame.MOUSEBUTTONUP:
            if selecting:
                selecting = False
                end_pos = event.pos
                # Копирование выделенного текста в буфер обмена
                selected_text = text  # Здесь нужно определить выделенный текст
                pyperclip.copy(selected_text)
        elif event.type == pygame.MOUSEMOTION:
            if selecting:
                end_pos = event.pos

    screen.fill(WHITE)
    screen.blit(text_surface, text_rect)

    if start_pos and end_pos:
        pygame.draw.rect(screen, BLUE, (start_pos[0], start_pos[1], end_pos[0] - start_pos[0], end_pos[1] - start_pos[1]), 2)

    pygame.display.flip()

pygame.quit()
→ Ссылка