Correction exercice Tkinter avec classe
Sommaire
- 1- Objectifs
- 2- Exercice 01
- 2.1- Énoncé
- 2.2- Correction
- 3- Exercice 02
- 3.1- Énoncé
- 3.2- Solution
- 4- Exercice 03
- 4.1- Énoncé
- 4.2- Solution
- 5- Exercice 04
- 5.1- Énoncé
- 5.2- Solution
- 6- Exercice 05
- 6.1- Énoncé
- 6.2- Solution
- 7- Exercice 06
- 7.1- Énoncé
- 7.2- Solution
- 8- Exercice 07
- 8.1- Énoncé
- 8.2- Solution
- 8.2.1- Sommaire du cours Python
Correction exercice Tkinter avec classe
- 
Objectifs
- Etre capable de programmer des applications tkinter avec des classes
- 
Exercice 01
- 
Énoncé
- Vous pouvez visualiser l’énoncé de l’exercice
- 
Correction
- 
Exercice 02
- 
Énoncé
- Vous pouvez visualiser l’énoncé de l’exercice
- 
Solution
- 
Exercice 03
- 
Énoncé
- Vous pouvez visualiser l’énoncé de l’exercice
- 
Solution
##-----Importation des Modules-----##
import tkinter as tk
class Application(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.creer_widgets()
    def creer_widgets(self):
        self.grid()
        ##-----Création de label de texte-----##
        self.label = tk.Label(self, text='Ici du texte.')
        self.label.grid(row = 0, column = 0, columnspan=2, padx=3, pady=3)
        ##-----Création des boutons-----##
        self.bouton = tk.Button(self, text='Quitter', width=19, command=self.destroy)
        self.bouton.grid(row = 2, column = 1, padx=3, pady=3)
        self.bouton = tk.Button(self, text='Recommencer', width=20)
        self.bouton.grid(row = 2, column = 0, padx=3, pady=3)
        ##-----Création du canevas-----##
        self.Canvas = tk.Canvas(self, bg="ivory", width=301, height=301)
        self.Canvas.grid(row = 1, column = 0, columnspan = 2, padx=5, pady=5)
        ##-----La grille-----##
        lignes = []
        for i in range(4):
            lignes.append(self.Canvas.create_line(0, 100*i+2, 303, 100*i+2, width=3, fill='green'))
            lignes.append(self.Canvas.create_line(100*i+2, 0, 100*i+2, 303, width=3, fill='green'))
            
if __name__ == "__main__":
    app = Application()
    app.title("Morpion")
    ##----- Programme principal -----##
    app.mainloop()# Boucle d'attente des événements
import tkinter as tk
import random as rd
class AppliCanevas(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.size = 300
        self.creer_widgets()
    def creer_widgets(self):
        # création canevas
        self.canv = tk.Canvas(self, bg="ivory", height=self.size,
                              width=self.size)
        self.canv.pack(side=tk.LEFT)
        # boutons
        self.bouton_cercles = tk.Button(self, text="Tracer 20 cercle !",width=15,
                                bg="sky blue",command=self.dessinerCercles)
        self.bouton_cercles.pack(side=tk.TOP)
        self.bouton_lignes = tk.Button(self, text="Tracer 20  lignes !",width=15,
                                bg="light blue",command=self.dessinerLignes)
        self.bouton_lignes.pack()
        self.bouton_triangles = tk.Button(self, text="Tracer 4 triangles !",width=15,
                                bg="light blue",command=self.dessinerTriangles)
        self.bouton_triangles.pack()
        self.bouton_quitter = tk.Button(self, text="Quitter",width=15,bg="cyan",
                                        command=self.destroy)
        self.bouton_quitter.pack(side=tk.BOTTOM)
    def rd_col(self):
        return rd.choice(("black", "red", "green", "blue", "yellow", "magenta",
                          "cyan", "white", "purple"))
    def dessinerCercles(self):
        for i in range(20):
            x, y = [rd.randint(1, self.size) for j in range(2)]
            diameter = rd.randint(1, 50)
            self.canv.create_oval(x, y, x+diameter, y+diameter,
                                  fill=self.rd_col())
    def dessinerLignes(self):
        for i in range(20):
            x, y, x2, y2 = [rd.randint(1, self.size) for j in range(4)]
            self.canv.create_line(x, y, x2, y2, fill=self.rd_col())
    def dessinerTriangles(self):
        for i in range(4):
            x, y, x2, y2 = [rd.randint(1, 200) for j in range(4)]
            self.canv.create_rectangle(x, y, x2, y2, fill=self.rd_col())
if __name__ == "__main__":
    app = AppliCanevas()
    app.title("Mes formes géomètriques !")
    app.mainloop()
import tkinter as tk
from tkinter import ttk
import tkinter.scrolledtext as st
from tkinter import messagebox
from datetime import date, timedelta
numjour=4
class App(tk.Tk):
    def __init__(self):
        super(App, self).__init__()
 
        self.title("Tkinter Label Frame")
        self.minsize(500,300)
        # Créer un labelFrame       
        self.labelFrame = ttk.LabelFrame(self, text = "Afficher les jours de l'année")
        self.labelFrame.grid(column = 0, row = 0, padx = 20, pady = 10)
        self.ComboboxJours()
        self.EntAnnee()
        self.btn()
        self.ScrolledText()
    def callback(self,even=None):
        global numjour
        numjour=int(self.choix.current())
        if self.choix.get() == "Lundi" : numjour=0
        messagebox.showinfo("Title", str(numjour))
    # Créer combobox des jours de la semaine
    def ComboboxJours(self):
        ttk.Label(self.labelFrame, text = "Choisir un jour").grid(column=2, row=1, sticky = tk.W)
        lesJours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
        self.choix = ttk.Combobox(self.labelFrame,
                                    values=lesJours)
        self.choix.grid(column=3, row=1)
        self.choix.bind("<<ComboboxSelected>>", self.callback)
     # Créer zone de saisie
    def EntAnnee(self):
        self.entryVariable = tk.StringVar()
 
        ttk.Label(self.labelFrame, text = "Saisir une année").grid(column=0, row=1, sticky = tk.W)
        self.Entry = ttk.Entry(self.labelFrame,textvariable=self.entryVariable).grid(column=1, row=1, sticky = tk.W)
    # Créer les boutons
    def btn(self):
         ttk.Button(self.labelFrame, text="Quitter",width=20,
                    command=self.destroy).grid(column=3, row=10,pady=50, sticky = tk.W)
         ttk.Button(self.labelFrame, text="Afficher",width=20,
                    command=self.TousJours).grid(columnspan=4, row=3,pady=20)        
    def joursem(self,D):
        return ('Lundi', 'Mardi', 'Mercredi', 'Jeudi',
            'Vendredi', 'Samedi', 'Dimanche')[int(D)-1]
    def Mois(self,D):
        return ('Janvier','Fevrier','Mars','Avril','Mai',
                'Juin','Juillet','Août','Septembre','Octobre',
                'Novembre','Decembre')[int(D)-1]
    def TousJours(self):
        # 1er janvier de l'année donnée
        year=self.entryVariable.get()
        AnneeEnCour = date.today().year
        dt = date(int(year), 1, 1)
        # Premier vendredi de l'année donnée
        messagebox.showinfo("Title", numjour)
        dt += timedelta(days = numjour - dt.weekday())
        list1=[]
        #ttk.Entry(self.labelFrame, width=100).grid(columnspan=4, row=4,pady=20)
        # disabling the state
        text_area = st.ScrolledText(self.labelFrame, 
                            width = 40,  
                            height = 8,  
                            font = ("Times New Roman", 
                                    15))
        text_area.grid(columnspan = 4,row=5, pady = 10, padx = 10)
        # Inserting Text which is read only
        i=1
        while int(dt.year) == int(year):
            #yield int(dt)
            text_area.insert(tk.INSERT,str(i)+ " - " + self.joursem(dt.strftime("%w"))
                             + ' le  ' + dt.strftime("%d") + " "
                             + self.Mois(dt.strftime("%m"))
                             + "  " + dt.strftime("%Y")+"\n")
            dt += timedelta(days = 7)
            i=i+1
        # Making the text read only 
        text_area.configure(state ='disabled')
    # Créer la liste d'affichage
    def ScrolledText(self):
        text_area = st.ScrolledText(self.labelFrame, 
                            width = 40,  
                            height = 8,  
                            font = ("Times New Roman", 
                                    15))
        text_area.grid(columnspan = 4,row=5, pady = 10, padx = 10)
        # Inserting Text which is read only 
        text_area.configure(state ='disabled')
       
      
if __name__ == "__main__":
    app = App()
    app.title("Affichage des jours !")
    app.mainloop()
