如何将 Pygame 窗口的标题居中?

问题描述 投票:0回答:1

我想做一个非常漂亮的程序,程序看起来已经很不错了,但是唯一让我烦恼的是,窗口标题(窗口标题)没有居中。 有谁知道我怎样才能实现这一目标?

我知道你可以绘制自定义的任何东西,但我也了解到这非常复杂,并且提到的这种方式不再适用于 Windows 10。

我真的需要帮助,因为该程序非常好,看起来也已经非常好,但我只需要做这件小事。

我试图将标题居中,并期望它会很容易,但它非常困难。不像我程序中带有自定义语音的语音转语音系统那么难,但仍然非常难。

python pygame window
1个回答
0
投票

我同意furas的评论,这很大程度上取决于你的桌面窗口管理器,使用无边框窗口并绘制你自己的标题将为你带来你想要的美感。

如果您想要居中文本,您可以随时使用 内置 str.center() 函数来填充字符串。但是 width 参数是字符长度,因此您需要根据窗口宽度将其转换为像素。您的窗口管理器可能不会显示前导或尾随空格,因此您可能需要用可打印字符将居中字符串添加到书尾。

这是一个最小的例子:

import pygame

def set_centred_title(window, title):
    title_width = window.get_width()
    title_columns = round(title_width / 13.4)  # Magic Number!
    fill_character = chr(0x2001)  # Unicode EM QUAD
    # add non-space characters at each end to prevent whitespace strip.
    padded_title = f"-{title:{fill_character}^{title_columns}}-"
    pygame.display.set_caption(padded_title) 

pygame.init()

WIDTH, HEIGHT = 900, 500
initial_title = "Centred Title"

window = pygame.display.set_mode((WIDTH, HEIGHT), pygame.RESIZABLE)
clock = pygame.time.Clock()
set_centred_title(window, initial_title)
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.VIDEORESIZE:  # size, w, h
            set_centred_title(window, "Resized Centred Title")
            
    window.fill("black")
    pygame.display.update()
    clock.tick(30)
pygame.quit()

对我来说这看起来不错:

Sample Centred Text

但是,在具有不同设置的不同电脑上它可能会被破坏。

© www.soinside.com 2019 - 2024. All rights reserved.