Tkinter - TP 2

Pratique du widget Canvas.

Objectif : gestion des évènements, paramétrage, graphisme

Le but de ce deuxième TP est de gérer les fenêtres (ouverture, configuration, modification et fermeture d’une fenêtre), de maîtriser l’affichage graphique et de gérer différents types d’évènements.

L’ordre des questions est adapté à une implantation incrémentale.

  1. Créer et afficher une fenêtre principale (root window), de taille la moitié de l’écran aussi bien horizontalement que verticalement et de titre « TP 2 ».

    wait_visibility(), winfo_screenwidth(), winfo_screenheight().

  2. Intercepter le signal WM_DELETE_WINDOW, généré par l’utilisation du bouton de fermeture de la fenêtre, de façon à afficher une fenêtre secondaire (Toplevel) qui demande confirmation.

    protocol().

  3. Ajouter deux Frame dans la fenêtre principale, dans la première ajouter un premier Button avec le texte « Carré », et dans la seconde un Canvas de largeur celle de la fenêtre et de hauteur l’espace non consommé par la première frame, et de couleur de fond ‘grey90’.

    grid() ou pack().

  4. Un clic sur le bouton « Carré » doit créer puis afficher un carré de taille \(20 \times 20\) px, de couleur noire, au centre du Canvas.

    create_rectangle().

  5. Gérer la déformation de la fenêtre mère qui doit avoir pour conséquence d’adapter la forme des objets graphiques du Canvas. Indication : pour détecter l’agrandissement ou la réduction de la fenêtre

    winfo_width(), winfo_height(), configure(), winfo_x(), winfo_y(), scale().

  6. Implanter la possibilité de déplacer un carré et de le positionner de façon précise par l’intermédiaire d’une grille « magnétique »[^une grille magnétique est une grille invisible conçue pour faciliter le positionnement d’éléments graphiques et qui repose sur l’attraction du curseur suivant une distance prédéfinie.] dont la définition doit être paramétrable et dépendante des dimensions de la fenêtre principale. Si un carré est déjà présent lors du positionnement d’un autre carré, ce dernier doit revenir à sa position initiale.

    tag_bind(), move().

  7. Implanter la destruction d’un carré (le choix du type d’action de l’utilisateur est laissé à l’appréciation du développeur).

    delete().

  8. Offrir la possibilité de construire une ligne polygonale (figure géométrique formée d’une suite de segments de droites reliant une suite de points) qui doit avoir comme point de départ et d’arrivée le centre d’un carré (non unique). Un carré peut avoir plusieurs lignes polygonales associées.

    Le déplacement d’un carré doit entraîner le déplacement du point extrémité de la ligne polygonale. La destruction d’un carré doit entraîner la destruction des lignes polygonales associées.

    create_line(), move(), delete().

  9. Associer et afficher un disque pour chaque sommet d’une ligne polygonale, disque que l’on peut sélectionner (penser au feedback) pour le déplacer de façon à modifier la ligne polygonale.

    create_oval(), move().

  10. Implanter la destruction d’une ligne polygonale et de ses disques (le choix du type d’action de l’utilisateur est laissé à l’appréciation du développeur).

    delete().

  11. La touche ESC du clavier doit provoquer l’effacement de la zone graphique après confirmation.