cadrogui escribió:gracias por la respuesta. he escrito la siguiente funcion, y en la terminal me muestra "none" de forma infinita hasta q se cierra el programa, alguien sabe por que?
...
Saludos, por lo que veo está faltando algo de código para ver el programa
funcionando (o ver si está fallando).
Agregué algo de ese código que falta para ver tu función y note dos cosas
para comentar:
1 - para invocar al código de una función alcanza con escribir su nombre
y los argumentos, en este caso:
- Código: Seleccionar todo
DIB_TXT('Texto ...', ...)
en tu código escribes:
- Código: Seleccionar todo
print DIB_TXT('Texto ...', ...)
la sentencia "print" que está a la izquierda significa que le pides a
python que imprima por consola el retorno de la función "DIB_TXT", y como
en el código de la función "DIB_TXT" no hay ningún retorno (usando "return
algo", entonces python devuelve "None".
Como nos comentas que el programa imprime muchas veces "None", seguramente
tu programa está dentro de un bucle ("while" por ejemplo), y eso hace
que python ejecute muchas veces la sentencia "print"... puedes quitar la
sentencia 'print' y listo.
2 - Otro asunto es "¿cual es el contexto de esa función?", es decir,
"¿que hay alrededor de esa función?". Está bien el código de la función,
pero los cambios no se verán en pantalla hasta que ejecutes una sentencia
como "pygame.display.flip()"... ¿has colocado esta sentencia en alguna
parte del programa después de imprimir?, posiblemente ese sea el problema
original.
Luego estuve viendo como hacer para imprimir texto en varias lineas, y
escribí un código similar al tuyo añadiendo esta funcionalidad y quitando
otras:

- Código: Seleccionar todo
# -*- encoding: utf-8 -*-
import pygame
def imprimir_texto(screen, texto, x, y, color, fuente):
# separa el texto en elementos de una lista
# ejemplo: convierte "hola \n mundo" en ["hola ", " mundo"]
texto_en_lineas = texto.split('\n')
# un bucle que itera por cada una de las lineas del texto
for linea in texto_en_lineas:
nueva = fuente.render(linea, 1, color)
# imprime en pantalla (se debe ejecutar pygame.display.flip() luego)
screen.blit(nueva, (x, y))
# reduce la altura de la coordenada vertical, para luego volver
# a imprimir la siguiente linea de texto mas abajo.
y += nueva.get_height()
def main():
pygame.font.init()
screen = pygame.display.set_mode((320, 240))
fuente = pygame.font.Font(None, 25)
verde = (90, 255, 90)
texto = " Hola, \n este es un texto \n escrito en varias lineas."
imprimir_texto(screen, texto, 10, 10, verde, fuente)
# Importate: muestra los cambios en pantalla, sin esta sentencia
# la pantalla permanecerá de color 'negro'.
pygame.display.flip()
# detiene el programa durante 4 segundos antes de cerrar la ventana.
pygame.time.wait(4000)
if __name__ == '__main__':
main()
parece mucho código, pero gran parte de todo ello son comentarios...
Por último, quisiera hacer una recomendación general acerca del código:
Es una buena idea ir construyendo el programa
paso a paso, de lo mas simple a lo mas complejo. En este caso puedes
escribir primero una función que imprima texto en una sola linea y de
un solo color; luego, si funciona bien, agregarle la posibilidad de imprimir
en diferentes colores, y si funciona bien, agregar la posibilidad de alterar
la tipografía y así... luego podrás ir implementando muchas cosas mas.
En tu función noté que tienes muchas cosas ya implementadas: colores,
tipografías y tamaños variables. El problema de hacer todo esto junto, está
en que si algo falla, te costará más tiempo saber "qué" está fallando.
En cambio, si haces la función paso por paso, probando los cambios cada vez,
encontrarás el motivo de cualquier fallo de manera inmediata. Python se adapta
muy bien a esta forma de trabajar: editar, probar, editar de nuevo...
inténtalo, es incluso mas divertido y constructivo que escribir todo el
código primero y luego ver que ocurre. Esto evita esa sensación de no
"encontrar" el motivo de un error durante mucho tiempo y detenerse.
Saludos.