Python 在Pygame Rect中写入数字/文本

Python 在Pygame Rect中写入数字/文本,python,pygame,sudoku,Python,Pygame,Sudoku,目前,我为我的数独解算器创建了一个可视化工具 现在我想用pygame在网格中显示数字 def draw(win): global grid w = 70 x,y = 0,0 for row in grid: for col in grid: rect = pygame.Rect(x,y,w,w) pygame.draw.rect(win,BLACK,rect) rect2 = pygame.Rect(x+2, y+2,

目前,我为我的数独解算器创建了一个可视化工具

现在我想用
pygame
在网格中显示数字

def draw(win):
global grid
w = 70
x,y = 0,0

for row in grid:
    for col in grid:
        
        rect = pygame.Rect(x,y,w,w)
        pygame.draw.rect(win,BLACK,rect)
        rect2 = pygame.Rect(x+2, y+2, w-1, w-1)
        pygame.draw.rect(win,WHITE,rect2)

    
        pygame.display.flip()
        x = x + w
    y = y + w 
    x = 0
代码很难看,我知道,但我的网格工作正常。我可以迭代它。我现在的问题是,我不知道如何用数字填充矩形? 我想在
rect2
中的
[row][col]
位置添加数独网格中的数字


我希望你们中的一个能帮助我。

我不知道soduku是如何工作的,但这就是你在pygame中呈现文本的方式。首先创建字体

fontName = pygame.font.get_default_font()
size = 10 # This means the text will be 10 pixels in height.
          # The width will be scaled automatically.
font = pygame.font.Font(fontName, size)
然后从字体创建文本表面

text = number 
antislias = True
color = (0, 0, 0)
surface = font.render(f"{text}", antialias, color)

注意文本参数必须始终是字符串,因此在您的情况下,必须使用
fstring
,因为您要呈现数字。此曲面与pygame中的任何其他曲面相似,因此您可以使用
win.blit(surface,(row,col))

我不知道soduku是如何工作的,但pygame中的文本就是这样渲染的。首先创建字体

fontName = pygame.font.get_default_font()
size = 10 # This means the text will be 10 pixels in height.
          # The width will be scaled automatically.
font = pygame.font.Font(fontName, size)
然后从字体创建文本表面

text = number 
antislias = True
color = (0, 0, 0)
surface = font.render(f"{text}", antialias, color)

注意文本参数必须始终是字符串,因此在您的情况下,必须使用
fstring
,因为您要呈现数字。此曲面与pygame中的任何其他曲面类似,因此您只需使用
win.blit(surface,(row,col))
在矩形中绘制文本,您需要一些东西。第一个是pygame
Font
。这基本上只是一个配置的字体。您可以将完整路径传递给True Type字体(可能是其他字体),也可以使用系统字体

number_font = pygame.font.SysFont( None, 16 )   # default font, size 16
然后,要渲染数字,请将其作为文本传递给字体的
render()
,为其提供前景色和背景色。第二个参数是您是否希望字体美观平滑。通常,我总是将此
保留为True

number_font  = pygame.font.SysFont( None, 16 )                # Default font, Size 16
number_image = number_font.render( "8", True, BLACK, WHITE )  # Number 8
这样就创建了一个
number\u图像
-a
pyagme.Surface
,其中包含“渲染”的数字。
现在这必须集中在每个细胞中。我们可以通过计算周围矩形和数字图像大小之间的大小差来实现这一点。把它一分为二会给我们一个中心位置。我只是猜测字体大小为
16
,它可能对您的网格太大(或者太小)


要在矩形中绘制文本,需要做一些事情。第一个是pygame
Font
。这基本上只是一个配置的字体。您可以将完整路径传递给True Type字体(可能是其他字体),也可以使用系统字体

number_font = pygame.font.SysFont( None, 16 )   # default font, size 16
然后,要渲染数字,请将其作为文本传递给字体的
render()
,为其提供前景色和背景色。第二个参数是您是否希望字体美观平滑。通常,我总是将此
保留为True

number_font  = pygame.font.SysFont( None, 16 )                # Default font, Size 16
number_image = number_font.render( "8", True, BLACK, WHITE )  # Number 8
这样就创建了一个
number\u图像
-a
pyagme.Surface
,其中包含“渲染”的数字。
现在这必须集中在每个细胞中。我们可以通过计算周围矩形和数字图像大小之间的大小差来实现这一点。把它一分为二会给我们一个中心位置。我只是猜测字体大小为
16
,它可能对您的网格太大(或者太小)


不幸的是,这对我不起作用。。我是Pygame的新手,所以可能无法正确实施它:很遗憾,DDoS不适合我。。我是Pygame的新手,所以我可能无法正确地实现它:D