Correction exercices widget tkinter en python

Correction exercices widget tkinter en python

  1. Objectifs

    • Comprendre et savoir utiliser les widgets tkinter de Python.
  2. Exercice 01

    1. Énoncé
      • Vous pouvez visualiser l’énoncé de l’exercice
      • Correction
        • # -*- coding: utf-8 -*-
          # script bonjour.py
          from tkinter import *
          
          # Création de la fenêtre principale (main window)
          Mafenetre = Tk()
          Mafenetre.geometry('400x80')
          Mafenetre.title("Application01")
          Mafenetre.configure(background='ivory')
          # Création d'un widget Label (texte 'Bonjour tout le monde !')
          Label1 = Label(Mafenetre, text = 'Bonjour tout le monde !',
                         fg = 'red',bg="ivory")
          Label1.config(font=("Courier", 20))
          # Positionnement du widget avec la méthode pack()
          Label1.pack()
          
          # Création d'un widget Button (bouton Quitter)
          Bouton1 = Button(Mafenetre, text = 'Quitter',bg="sky blue",
                           width=15, command = Mafenetre.destroy)
          Bouton1.pack()
          
          # Lancement du gestionnaire d'événements
          Mafenetre.mainloop()
          



  3. Exercice 02

    1. Énoncé
    2. Solution
      • # ref. Swinnen, Apprendre à programmer avec Python, page 97
        # Introduction to TKinter, page 84 ...
        #
        # le layer grid ; le widget Entry
        #
        from tkinter import *
        fen = Tk () # la fenêtre de l'application
        fen.title('titre')
        # les labels
        labelUn = Label (fen, text="votre prénom :")
        labelUn.grid (row = 1,column = 1, sticky = "E", padx = 10)
        labelDeux = Label (fen, text="votre nom :")
        
        labelDeux.grid (row = 2, column = 1, sticky = "E", padx = 10)
        labelTrois = Label (fen, text="votre ville :")
        labelTrois.grid (row = 3, column = 1, sticky = "E", padx = 10)
        labelValider = Label (fen, text="") # label de la chaîne de validation
        labelValider.grid (row = 4, column = 1, columnspan = 2,\
         sticky ="W",padx = 10)
        # les entrées
        entreeUn = Entry (fen)
        entreeUn.grid (row = 1, column = 2)
        entreeUn.focus_set()
        entreeDeux = Entry (fen)
        entreeDeux.grid (row = 2, column = 2)
        entreeTrois = Entry (fen)
        entreeTrois.grid (row = 3, column = 2)
        # le cannevas et son image (232x245)
        cannevasImg = Canvas (fen, width =120, height = 120, bg = "ivory")
        logo = PhotoImage (file="logo.png")
        
        image = cannevasImg.create_image(64, 60, image = logo)
        cannevasImg.grid(row = 1, column = 3, rowspan = 3, padx = 10, pady = 10)
        # les boutons et leur gestion
        def valider () :
         chn = entreeUn.get()+" // "+ entreeDeux.get()+ " // "+ \
         entreeTrois.get()
         labelValider.config(text = chn)
        def initialiser ():
         labelValider.config(text = "")
         entreeTrois.delete (0, END)
         entreeDeux.delete (0, END)
         entreeUn.delete (0, END)
         entreeUn.focus_set()
        boutonQuitter = Button (fen, text=' Quitter ',command=fen.quit)
        boutonQuitter.grid (row = 5, column = 3, pady = 10)
        boutonValider = Button (fen, text=' Valider ',command=valider)
        boutonValider.grid (row = 5, column = 1, pady = 10)
        boutonInitialiser = Button (fen, text=' Réinitialiser ',\
         command=initialiser)
        boutonInitialiser.grid (row = 5, column = 2, pady = 10)
        fen.mainloop() # boucle de capture des événements
        fen.destroy() # fin de l'application
        

  4. Exercice 03

    1. Énoncé
    2. Solution
      • Première version:
        • ##----- Importation des Modules -----##
          from tkinter import *
          
          ##----- Variables globales -----##
          c = 42     # Longueur d'un côté d'une case
          n = 8      # Nombre de cases par ligne et par colonne
          cases = [] # Liste contenant les objets cases
          
          ##----- Création de la fenêtre -----##
          fen = Tk()
          fen.title('Damier')
          
          ##----- Création des boutons -----##
          bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
          bouton_quitter.grid(row = 1, column = 1, sticky=W+E, padx=3, pady=3)
          
          ##----- Création des canevas -----##
          dessin = Canvas(fen, width = n*c+2, height = n*c+2, bg = 'ivory',
                      highlightthickness=6, highlightbackground="sky blue")# Bordure du cases
          dessin.grid(row = 0, column = 0, columnspan=2, padx=3, pady=3)
          
          ##----- Création des figures -----##
          for ligne in range(n): # Les cases de chaque ligne seront stockées dans "stockLignes"
              stockLignes=[]
              for colonne in range(n):    # Conception des cases d'une ligne
                  stockLignes.append(dessin.create_rectangle(colonne*c+2, ligne*c+2,
                                      (colonne+1)*c+2, (ligne+1)*c+2))
              cases.append(stockLignes)   # Ajout de la ligne à la liste principale
          
          ##----- Modification des figures créées -----##
          for ligne in range(n):
              for colonne in range(n):
                  if (ligne+colonne)%2 == 0:      # Parité
                      dessin.itemconfigure(cases[ligne][colonne], outline='black', fill='black')
                  else:
                      dessin.itemconfigure(cases[ligne][colonne], outline='white')
          
          ##----- Programme principal -----##
          fen.mainloop() # Boucle d'attente des événements
          
      • Deuxième version:
        • # Dessin d'un damier avec des carrés
          from tkinter import *
          def ligne_de_carres(x, y, c, n):
              # dessiner une ligne de n carrés
              i = 0
              while i < n:
                  can.create_rectangle(x, y, x+c, y+c, fill='navy')
                  i += 1
                  x += c*2 # espacer les carrés
          def damier(c, nl, nc):
              # dessiner nl lignes de nc carrés de taille c avec décalage alterné
              y = 0
              while y < nl:
                  if y % 2 == 0: # une ligne sur deux, on
                      x = 0 # commencera la ligne de
                  else: # carrés avec un décalage
                      x = 1 # de la taille d'un carré
                  ligne_de_carres(x*c, y*c, c, nc)
                  y += 1
          
          c = 40 # côté d'un carré
          nl = 8 # nombre de lignes du damier
          nc = 10 # nombre de colonnes
          fen = Tk()
          can = Canvas(fen, width=c*nc-3, height=c*nl-3, bg='ivory')
          can.pack(side=TOP)
          damier(c, nl, nc)
          fen.mainloop()
  5. Exercice 04

    1. Énoncé
    2. Solution
      • ##-----Importation des Modules-----##
        from tkinter import *
        ##----- Définition des Variables globales -----##
        ##----- Définition des Fonctions -----##
        ##-----Création de la fenêtre-----##
        fen = Tk()
        fen.title('Morpion')
        ##-----Création des zones de texte-----##
        message=Label(fen, text='Ici du texte.')
        message.grid(row = 0, column = 0, columnspan=2, padx=3, pady=3, sticky = W+E)
        ##-----Création des boutons-----##
        bouton_quitter = Button(fen, text='Quitter', command=fen.destroy)
        bouton_quitter.grid(row = 2, column = 1, padx=3, pady=3, sticky = S+W+E)
        
        bouton_reload = Button(fen, text='Recommencer')
        bouton_reload.grid(row = 2, column = 0, padx=3, pady=3, sticky = S+W+E)
        ##-----Création du canevas-----##
        dessin=Canvas(fen, bg="ivory", width=301, height=301)
        dessin.grid(row = 1, column = 0, columnspan = 2, padx=5, pady=5)
        ##-----La grille-----##
        lignes = []
        for i in range(4):
            lignes.append(dessin.create_line(0, 100*i+2, 303, 100*i+2, width=3, fill='green'))
            lignes.append(dessin.create_line(100*i+2, 0, 100*i+2, 303, width=3, fill='green'))
        ##-----Programme principal-----##
        fen.mainloop()# Boucle d'attente des événements
        



Laisser un commentaire