Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
Python

Correction exercices widget tkinter en python

Un cours complet pour maîtriser Correction exercices widget tkinter en python.

0 chapitres 0 QCM Accès gratuit
  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
        
    3. 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