python库pygame:居中文本

时间:2014-06-01 18:12:12

标签: python python-3.x pygame

我有一个代码:

# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
screen.blit(text, [SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2])

我如何获得像java中的文本宽度和高度方法,所以我可以将文本居中,如:

screen.blit(text, [SCREEN_WIDTH / 2 - text_w / 2, SCREEN_HEIGHT / 2 - text_h / 2])

如果不可能,另一种方式是什么? 我找到了this示例,但我并不是真的理解它。

6 个答案:

答案 0 :(得分:12)

抓住它时,您始终可以将文本矩形居中:

# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
text_rect = text.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
screen.blit(text, text_rect)

只是另一种选择

答案 1 :(得分:9)

您可以使用text.get_rect()获取渲染文本图片的尺寸,该width会返回heighttext.get_rect().width属性的Rect对象(请参阅链接文档)完整列表)。即你可以做{{1}}。

答案 2 :(得分:1)

pygame.Surface.get_rect.get_rect()返回一个具有 Surface 对象大小的矩形,该矩形始终以(0,0)开始,因为 Surface 对象没有位置。矩形的位置可以通过关键字参数指定。例如,可以使用关键字参数 <properties> <mongo.java.driver.version>3.8.2</mongo.java.driver.version> <spring.data.version>1.10.0.RELEASE</spring.data.version> </properties> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>${mongo.java.driver.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons-core</artifactId> <version>1.4.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>${spring.data.version}</version> </dependency> 指定矩形的中心。这些关键字参数在返回之前将应用于pygame.Rect的属性(有关关键字参数的完整列表,请参见pygame.Rect)。

获取文本矩形并将文本矩形的中心放置在窗口矩形的中心:

center

您甚至可以从显示屏 Surface 中获取窗口的中心:

text_rect = text.get_rect(center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))

或使用pygame.display.get_surface()

text_rect = text.get_rect(center = screen.get_rect().center)

可以使用blit方法在另一个 Surface 上绘制 Surface 。第二个参数是表示左上角的元组( x y )或矩形。对于矩形,仅考虑矩形的左上角。因此,您可以将文本矩形直接传递到text_rect = text.get_rect(center = pygame.display.get_surface().get_rect().center)

blit

最小示例:

screen.blit(text, text_rect)

答案 3 :(得分:0)

渲染文本在Pygame的透明表面上显示。所以你可以使用这里描述的表面类的方法: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_width

所以对你来说,以下方法可行:

text.get_width()

text.get_height()

答案 4 :(得分:0)

我用这两种方法在中间写

import pygame
from pygame.locals import *

pygame.init()
pygame.font.init()
SURF = pygame.display.set_mode((600, 400))

# font object..................................
def create_font(t,s=72,c=(255,255,0), b=False,i=False):
    font = pygame.font.SysFont("Arial", s, bold=b, italic=i)
    text = font.render(t, True, c)
    textRect = text.get_rect()
    return [text,textRect]
# Text to be rendered with create_font    

game_over, gobox = create_font("GAME OVER")
restart, rbox = create_font("Press Space to restart", 36, (9,0,180))
centerx, centery = SURF.get_width() // 2, SURF.get_height() // 2
gobox = game_over.get_rect(center=(centerx, centery))
rbox.center = int((SURF.get_width() - restart.get_width())//2), restart.get_height()
loop = True
clock = pygame.time.Clock()
while loop == True:
    SURF.fill((0,0,0))
    x, y = pygame.mouse.get_pos()
    SURF.blit(game_over, gobox)
    SURF.blit(restart, rbox.center)
    for e in pygame.event.get():
        if e.type == QUIT:
            loop = 0
    pygame.display.update()
    clock.tick(60)

pygame.quit()

答案 5 :(得分:-1)

只是一个例子:

import pygame
import time
pygame.init()
screen = pygame.display.set_mode([1920, 1080])
black = pygame.Color(0, 0, 0)
white = pygame.Color(255,255,255)
def showload():
    myFont = pygame.font.SysFont('monaco', 72)
    Ssurf = myFont.render('loading...', True, black)
    Srect = Ssurf.get_rect()
    Srect.midtop = (960, 540)
    screen.blit(Ssurf, Srect)
    pygame.display.flip()
screen.fill(white)
showload()
time.sleep(5)`

Srect.midtop = (960, 540) 表示右侧的像素数和从顶部向下的像素数。