2 votes

Comment détecter le redimensionnement d'une fenêtre en Python ?

Comment voir si la fenêtre a été redimensionnée ? Je commence en plein écran, mais si je modifie la taille pour qu'elle corresponde à la moitié de mon écran, tout mon texte est mélangé.

Voici mon code :

# Import os
import os

# Create function called title that prints the title screen
def title():
    print('@------------------------------------------------------------------------------------@'.center(os.get_terminal_size().columns), end='')
    print('|                                                                                    |'.center(os.get_terminal_size().columns), end='')
    print('|                                      |PyTerm v0.1.7|                               |'.center(os.get_terminal_size().columns), end='')
    print('|                                                                                    |'.center(os.get_terminal_size().columns), end='')
    print('@------------------------------------------------------------------------------------@'.center(os.get_terminal_size().columns), end='')

# Call the function
title()

Lorsque je l'exécute, le texte s'aligne, mais lorsque je passe en mode plein écran, il est éparpillé. Existe-t-il un moyen de résoudre ce problème ? Est-ce que je peux détecter quand l'utilisateur redimensionne la fenêtre ? Je suis sous Windows 10 et j'utilise Python 3.1.9. Je l'exécute avec py ( C:\Windows\py.exe )

Voilà à quoi ça ressemble quand je l'exécute : Before picture

Voici la situation lorsque je passe en plein écran : After picture

Merci

1voto

Alexander L. Hayes Points 1351

Je n'ai pas de machine Windows pour tester, mais une possibilité serait de redessiner la console dans une boucle :

  1. Effacer l'écran actuel (voir : Effacer le terminal en Python )
  2. Exécuter le title fonction
  3. Attendez un peu

Si l'utilisateur redimensionne l'écran, la valeur redimensionnée de la balise offset doit être fixée à la nouvelle taille.

import os
import time

def title(offset_value):
    print('@------------------------------------------------------------------------------------@'.center(offset_value), end='')
    print('|                                                                                    |'.center(offset_value), end='')
    print('|                                      |PyTerm v0.1.7|                               |'.center(offset_value), end='')
    print('|                                                                                    |'.center(offset_value), end='')
    print('@------------------------------------------------------------------------------------@'.center(offset_value))

if __name__ == "__main__":

    while True:

        # Clear the terminal
        # See: https://stackoverflow.com/questions/2084508/clear-terminal-in-python
        os.system('cls' if os.name == 'nt' else 'clear')

        # Redraw the screen
        offset = os.get_terminal_size().columns
        title(offset)

        # Wait for a bit
        time.sleep(1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X