Objectifs
- Comprendre et savoir utiliser les widgets tkinter de Python.
Exercice 01
É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()
Exercice 02
Énoncé
- Vous pouvez visualiser l'énoncé de l'exercice
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
Exercice 03
Énoncé
- Vous pouvez visualiser l'énoncé de l'exercice
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
- Première version:
- 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()
Exercice 04
Énoncé
- Vous pouvez visualiser l'énoncé de l'exercice
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