有没有办法将下面的文本居中放置在框内?

问题描述

我使用 Python 和 Pygame 在 Pi 上显示天气 我有 2 个盒子,我试图在其中显示风速和风向 这是我的代码

    pg.draw.rect(screen,(255,255,255),(643,67,85,30),2)  # draw windspeed Box 
if skyData.status == sky.STATUS_OK: 
    ren = font.render("{}°C".format(skyData.tempNow),1,pg.Color('black'),pg.Color(134,174,230))
else:
    ren = font.render("",pg.Color(185,208,240))
screen.blit(ren,(658*HRES//1600,84*VRES//900-ren.get_height()//2))


pg.draw.rect(screen,(872,116,2)  # draw wind direction Box cardinal + degrees
if forecastData.status == forecast.STATUS_OK:
    ren = font.render("{} {}°".format(forecastData.wind_direction_cardinal,forecastData.wind_direction),230))
screen.blit(ren,(882*HRES//1600,84*VRES//900-ren.get_height()//2)) 

效果很好,但文本永远不会居中 如果风速低于 10mph,则文本在右侧,如果方向是 N 而不是 NW 或 NNW,则文本在左侧

我希望文本在指定的框内居中 这可能吗?

这是他们现在的样子,如果方向变成 S 则文字完全向左 Box image

解决方法

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

box = pygame.Rect(643,67,85,30),2)
pg.draw.rect(screen,(255,255,255),box,2)  # draw windspeed box 

if skyData.status == sky.STATUS_OK: 
    ren = font.render("{}°C".format(skyData.tempnow),1,pg.Color('black'),pg.Color(134,174,230))
else:
    ren = font.render("",pg.Color(185,208,240))

ren_rect = ren.get_rect(center = box.center)
screen.blit(ren,ren_rect)

注意,blitdest 参数也可以是一个矩形。