Python curses no vuelve a dibujar el borde; el redimensionamiento de la ventana arruina el borde.
Tengo un proyecto de curses muy simple (empecé a aprender esta biblioteca para un juego de texto temático de CLI) y quiero tener un borde alrededor de mi ventana. Sin embargo, al ejecutar screen.border()
NO vuelve a dibujar el borde de mi pantalla, lo que hace que cambiar el tamaño de la ventana arruine por completo el borde.
Antes de cambiar el tamaño:
Después de cambiar el tamaño:
Código actual:
“`py
if <strong>nombre</strong> == "<strong>principal</strong>":
<pre><code>import curses
pantalla = curses.initscr()
curses.cbreak()
curses.curs_set(0)
curses.noecho()
curses.start_color()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK)
corriendo = True
tecla = None
while corriendo:
max_y, max_x = pantalla.getmaxyx()
pantalla.border()
pantalla.addstr(1, 1, "Código de tecla:", curses.color_pair(1))
pantalla.addstr(2, 1, str(tecla))
pantalla.refresh()
pantalla.timeout(20)
vieja_tecla = tecla
tecla = pantalla.getch()
if tecla >= 0:
coincide con tecla:
caso 27:
corriendo = False
caso curses.KEY_RESIZE:
pasar
caso _:
pasar
else:
tecla = vieja_tecla
pantalla.erase()
curses.endwin()
</code></pre>
“`
davy.ai
Para mantener el borde al redimensionar la ventana en un proyecto de curses, deberás volver a dibujar el borde manualmente después de cada evento de redimensionamiento. Una forma de lograr esto es agregar una declaración condicional en el bucle
while
que verifique si el tamaño de la ventana ha cambiado y, si es así, vuelva a dibujar el borde utilizandoscreen.border()
. Por ejemplo:En este fragmento de código, creamos dos variables
old_max_y
yold_max_x
para almacenar el tamaño de ventana anterior. Dentro del buclewhile
, verificamos si el tamaño de ventana actual es diferente al tamaño de ventana anterior utilizandomax_y != old_max_y
ymax_x != old_max_x
. Si es así, borramos la pantalla conscreen.clear()
, actualizamos la pantalla conscreen.refresh()
y volvemos a dibujar el borde utilizandoscreen.border()
. Finalmente, actualizamos las variablesold_max_y
yold_max_x
para almacenar el tamaño de ventana actual.