es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Relleno de texto usando pygame SysFont

Estoy intentando utilizar SysFont de pygame para mostrar texto en la pantalla, pero quiero que el rectángulo de fondo sea ligeramente más ancho que el texto real.

Cuando utilizo el siguiente código, el fondo parece comenzar exactamente donde comienza la primera letra y termina exactamente donde termina la última letra.

py
font = pygame.font.SysFont("Helvetica", 30)
img = font.render("ABC", True, "white", "blue1")
img_width = img.get_width()
img_height = img.get_height()
screen.blit(img, (200, 200, img_width, img_height))

¿Hay alguna manera de agregar un margen a la izquierda y derecha del texto en el color de fondo? Pensé que tal vez agregar algo a img_width podría ayudar, pero no lo hizo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, se puede agregar algo de relleno a la izquierda y derecha del texto en color de fondo creando una superficie que sea ligeramente más grande que la superficie de texto, luego copiando la superficie de texto en la superficie más grande con un espacio adicional alrededor. Aquí hay un ejemplo:

    fuente = pygame.font.SysFont("Helvetica", 30)
    texto = "ABC"
    color_texto = "white"
    color_fondo = "blue1"
    
    # se renderiza la superficie de texto y se obtienen sus dimensiones
    superficie_texto = fuente.render(texto, True, color_texto, color_fondo)
    ancho_texto, alto_texto = superficie_texto.get_size()
    
    # se crea una superficie más grande con relleno
    relleno = 10  # ajustar según sea necesario
    superficie_fondo = pygame.Surface((ancho_texto + relleno * 2, alto_texto + relleno * 2))
    superficie_fondo.fill(color_fondo)
    
    # se copia la superficie de texto en la superficie de fondo con relleno
    posicion_texto = (relleno, relleno)
    superficie_fondo.blit(superficie_texto, posicion_texto)
    
    # se copia la superficie de fondo en la pantalla
    pantalla.blit(superficie_fondo, (200, 200))
    

    En este ejemplo, primero se renderiza la superficie de texto y se obtienen sus dimensiones. Luego creamos una superficie más grande usando pygame.Surface con dimensiones que son ligeramente más grandes que la superficie de texto, más un relleno adicional a cada lado. Rellenamos esta superficie más grande con el color de fondo deseado.

    A continuación, copiamos la superficie de texto en la superficie de fondo con un desplazamiento de (relleno, relleno) para que haya algo de espacio alrededor del texto. Finalmente, copiamos la superficie de fondo en la pantalla como antes.

    Ajuste el valor de relleno para ajustar la cantidad de espacio alrededor del texto.

Comments are closed.