在 pygame 中无法在屏幕上呈现文本
Unable to render text over a screen in pygame
我正在尝试使用 pygame 构建带有 GUI 的数独求解器。
我用白色填充屏幕,并为网格绘制矩形,然后翻转屏幕以更新它。
现在我使用板数组绘制网格值,使用以下函数
def on_render(self, board):
font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 1)
screen = pygame.display.get_surface()
screen.fill((255, 255, 255))
for height in range(9):
for width in range(9):
rect = pygame.Rect(width*70, height*70, 68, 68)
pygame.draw.rect(screen, (0, 0, 0), rect)
pygame.display.flip()
screen = pygame.display.get_surface()
for height in range(9):
for width in range(9):
if not board[height][width] == 0:
value = font.render(str(board[height][width]), True, (255, 255, 255))
valrect = value.get_rect()
valrect.center = (width*70 + 34, height*70 + 34)
screen.blit(value, valrect)
网格绘制正确,非零元素也被正确读取,但文本根本没有呈现。
因为渲染函数也会在程序求解时绘制求解的网格,所以我希望它在值被 blit 到屏幕时更新。
我做错了什么?
pygame.font.Font
的构造函数的最后一个参数是以像素为单位的字体大小。所以 1 表示 1 个像素。
此外,您必须在绘制文本后更新显示。请注意,在绘制整个场景后更新显示一次就足够了:
使用不同的字体大小(例如 40)并更新 on_render
末尾的显示:
def on_render(board):
font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 40)
screen = pygame.display.get_surface()
# clear display
screen.fill((255, 255, 255))
# draw grid
for height in range(9):
for width in range(9):
rect = pygame.Rect(width*70, height*70, 68, 68)
pygame.draw.rect(screen, (0, 0, 0), rect)
# draw text
for height in range(9):
for width in range(9):
if not board[height][width] == 0:
value = font.render(str(board[height][width]), True, (255, 255, 255))
valrect = value.get_rect()
valrect.center = (width*70 + 34, height*70 + 34)
screen.blit(value, valrect)
# update display
pygame.display.flip()
我正在尝试使用 pygame 构建带有 GUI 的数独求解器。 我用白色填充屏幕,并为网格绘制矩形,然后翻转屏幕以更新它。 现在我使用板数组绘制网格值,使用以下函数
def on_render(self, board):
font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 1)
screen = pygame.display.get_surface()
screen.fill((255, 255, 255))
for height in range(9):
for width in range(9):
rect = pygame.Rect(width*70, height*70, 68, 68)
pygame.draw.rect(screen, (0, 0, 0), rect)
pygame.display.flip()
screen = pygame.display.get_surface()
for height in range(9):
for width in range(9):
if not board[height][width] == 0:
value = font.render(str(board[height][width]), True, (255, 255, 255))
valrect = value.get_rect()
valrect.center = (width*70 + 34, height*70 + 34)
screen.blit(value, valrect)
网格绘制正确,非零元素也被正确读取,但文本根本没有呈现。 因为渲染函数也会在程序求解时绘制求解的网格,所以我希望它在值被 blit 到屏幕时更新。 我做错了什么?
pygame.font.Font
的构造函数的最后一个参数是以像素为单位的字体大小。所以 1 表示 1 个像素。
此外,您必须在绘制文本后更新显示。请注意,在绘制整个场景后更新显示一次就足够了:
使用不同的字体大小(例如 40)并更新 on_render
末尾的显示:
def on_render(board):
font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 40)
screen = pygame.display.get_surface()
# clear display
screen.fill((255, 255, 255))
# draw grid
for height in range(9):
for width in range(9):
rect = pygame.Rect(width*70, height*70, 68, 68)
pygame.draw.rect(screen, (0, 0, 0), rect)
# draw text
for height in range(9):
for width in range(9):
if not board[height][width] == 0:
value = font.render(str(board[height][width]), True, (255, 255, 255))
valrect = value.get_rect()
valrect.center = (width*70 + 34, height*70 + 34)
screen.blit(value, valrect)
# update display
pygame.display.flip()