【问题标题】:How to center text inside a shape?如何在形状内居中文本?
【发布时间】:2021-09-27 11:36:54
【问题描述】:

我想在一个圆圈内显示一个数字。 数字必须居中 (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()

【问题讨论】:

  • 问题解决了吗?

标签: python text pygame center


【解决方案1】:

获取文本的边界矩形,并将矩形的中心设置为文本的中心。使用矩形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()

【讨论】:

  • @HajpaHajpa 这正是我的代码所做的。在你的圈子的位置是(300, 300) 可以用(x, y) 替换它。我添加了一个带有参数的 draw_circle 函数 (x, y)
【解决方案2】:

使 PyGame 文本围绕点 x_pos, y_pos 居中:

  1. 获取文本对象的尺寸:width, height = text.get_rect()[2:4]
  2. 渲染 (screen.blit()) 图像时,将坐标向后移动一半宽度和一半高度:screen.blit(text, (x_pos - int(width / 2), y_pos - int(height / 2)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2019-10-08
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多