首页 > 解决方案 > 如何在形状内居中文本?

问题描述

我想在一个圆圈内显示一个数字。数字必须居中 (x,y)。怎么做?

import pygame, sys

pygame.init()
screen= pygame.display.set_mode((0, 0))
black= (0,0,0)
white= (255,255,255)
red= (255,0,0)
number= "8"
bigfont = pygame.font.SysFont("arial", 50)
text = bigfont.render(number, True, white)

def draw():
    pygame.draw.circle(screen, red, (300,300), 200)
    screen.blit(text, (300,300))
    pygame.display.update()

标签: pythontextpygamecenter

解决方案


获取文本的边界矩形,并将矩形的中心设置为文本的中心。使用矩形到blit文本:

text_rect = text.get_rect()
text_rect.center = (300, 300)
screen.blit(text, text_rect)

与一行代码相同:

screen.blit(text, text.get_rect(center = (300, 300)))

在函数中使用此代码:

def draw_circle(x, y, text):
    pygame.draw.circle(screen, red, (x, y), 200)
    screen.blit(text, text.get_rect(center = (x, y)))

pygame.Surface.blit

[...] dest 参数可以是一对表示 blit 左上角位置的坐标,也可以是Rect,其中矩形的左上角将用作 blit 的位置。


最小的例子:

import pygame

pygame.init()
window = pygame.display.set_mode((500, 500))
font = pygame.font.SysFont(None, 100)
clock = pygame.time.Clock()
text = font.render("Text", True, (255, 255, 0))

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

    window_center = window.get_rect().center

    window.fill(0)
    pygame.draw.circle(window, (255, 0, 0), window_center, 100)
    window.blit(text, text.get_rect(center = window_center))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
exit()

推荐阅读