python - 如何在形状内居中文本?
问题描述
我想在一个圆圈内显示一个数字。数字必须居中 (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()
解决方案
获取文本的边界矩形,并将矩形的中心设置为文本的中心。使用矩形到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)))
[...] 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()
推荐阅读
- c# - 源不可用错误(源实际可用)
- scala - scala:从第二个位置开始的每个偶数位数字的平方和
- javascript - 根据条件显示/隐藏数组项:ReactJS
- java - Android:通过 android 数据绑定将 lambda 传递给回收器适配器
- java - 如何提取和替换具有特定格式的字符串?
- java - 具有 Microsoft EWS 给定 TimeZone 的 ExchangeService 实例或 GetUserAvailabilityResults
- excel - excel检查用户输入是否在范围内
- c++ - 使用 RecordSet 读取 nText
- jquery - ASP.NET Core jQuery .ajax 帖子总是为空?
- reactjs - 状态未从子回调中更新