Texto con barra de scroll

Muy buenas, he estado intentando hacer un historial de ajedrez y me gustaria que el texto que aparece en el historial se le pueda hacer scroll

ya que toda una partida de ajedrez no entra en pantalla.

desde ya muchas gracias

Hola @Miguel_Miloro !!!, es muy interesante tu consulta. Creo que una forma sencilla de realizarlo es mediante un actor que represente el historial en pantalla, y que tenga un método para agregar lineas de la partida una a una.

Recién boceté algo imaginando cómo podría ser. Lo más sencillo que se me ocurrió es crear un actor HistorialConDesplazamiento que se comporta así:

A grandes rasgos, el actor es solo un contenedor de otros actores. HistorialConDesplazamiento está compuesto de una pizarra (que dibujar el borde) dos actores para representar los botones de subir y bajar y un cuarto actor que es el texto.

Por último, para representar el desplazamiento usé un texto que actúa de ventana (o viewport) del texto que se quiere mostrar en ese momento.

Te paso el código, igualmente sentite libre de volver a preguntar si te genera alguna duda:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

class HistorialConDesplazamiento(pilasengine.actores.Actor):
    
    def iniciar(self):
        self.posicion = 0
        self.imagen = "invisible.png"
        self.lineas = []
        
        self.boton_subir = pilas.actores.Aceituna()
        self.boton_subir.x = 200
        self.boton_subir.y = 100
        self.boton_subir.cuando_hace_click = self.subir

        self.boton_bajar = pilas.actores.Aceituna()
        self.boton_bajar.x = 200
        self.boton_bajar.y = -100
        self.boton_bajar.cuando_hace_click = self.bajar
        
        # Este se tendria que quitar
        self.actor_texto = pilas.actores.Texto(x=-90, y=90)
        self.actor_texto.ancho = 240
        self.borde = pilas.actores.Pizarra()
        self.borde.rectangulo(-100, 100, 260, 200)
        

    def agregar(self, mensaje):
        self.lineas.append(mensaje)
        self.actualizar_textos()

    def subir(self):
        self.posicion -= 1
        if self.posicion < 0:
            self.posicion = 0
            self.boton_subir.decir("no puedo ir mas arriba")
        self.actualizar_textos()
        
    def bajar(self):
        self.posicion += 1
        
        if self.posicion > len(self.lineas) - 9:
            self.posicion = len(self.lineas) - 9
            self.boton_bajar.decir("no puedo ir mas abajo")
                
        self.actualizar_textos()
        
    def evitar_desborde(self):
        self.posicion = max(self.posicion, 0)
    
    def actualizar_textos(self):
        cantidad_de_lineas = 9
        lineas_a_mostrar = self.lineas[self.posicion:self.posicion+cantidad_de_lineas]
        self.actor_texto.texto = "\n".join(lineas_a_mostrar)
        self.actor_texto.centro_y = 0
        self.actor_texto.centro_x = 0
    
pilas.actores.vincular(HistorialConDesplazamiento)
historial = pilas.actores.HistorialConDesplazamiento()


historial.agregar("hola")
historial.agregar("hola 2")
historial.agregar("hola 3")
historial.agregar("hola 4")
historial.agregar("hola 5")
historial.agregar("hola 6")
historial.agregar("hola 7")
historial.agregar("hola 8")
historial.agregar("hola 9")
historial.agregar("hola 10")
historial.agregar("hola 11")
historial.agregar("hola 12")
historial.agregar("hola 13")
historial.agregar("hola 14")
historial.agregar("mensaje final")


pilas.ejecutar()

¡Abrazo!

¡¡¡muchas gracias!!!

ya va tomando forma :smiley:

(te moves por el historial con las letras “m” y “n”)

cuando quede completo lo subiremos a el foro