Aller au contenu

Exercices

Consignes

  • Ne pas de faire aider par des IA ou genAI
  • Utiliser les composants ttk autant que possible

Série 1

  1. Créer une fenêtre qui affiche un bouton dont le texte est un nombre alétoire entre 1 et 100. Chaque fois qu'on clique sur le bouton, le nombre aléatoire change.
  2. Créer une fenêtre qui affiche un bouton "Quitter" et un texte editable. Gérer le comportement suivant quand on clique sur le bouton "Quitter":
    • Si on n'a pas modifié le texte, la fenêtre se ferme,
    • Si on a modifié le texte, une boîte de dialogue demande si on veut vraiment quitter. Si on répond "Oui", la fenêtre se ferme, sinon elle reste ouverte (voir astuce plus bas).
  3. Créer une fenêtre qui affiche un texte editable et les boutons "sauvegarder" et "charger". Gérer le comportement suivant:
    • Quand on clique sur "sauvegarder", le texte est sauvegardé dans un fichier texte,
    • Quand on clique sur "charger", le texte est chargé depuis le fichier texte et est affiché dans la zone éditable (voir astuce plus bas).
  4. Créer une fenêtre qui affiche deux textes editables et les boutons "sauvegarder" et "charger". Gérer le comportement suivant:
    • Quand on clique sur "sauvegarder", le texte de la première zone éditable est sauvegardé dans un fichier texte. Le nom du fichier est déterminé par le texte de la deuxième zone éditable,
    • Quand on clique sur "charger", le texte est chargé depuis le fichier texte et est affiché dans la zone éditable. Le nom du fichier est déterminé par le texte de la deuxième zone éditable.

Astuces

Générer un nombre aléatoire
import random
nombre = random.randint(1, 100)
Fermer une fenêtre tk
window.destroy()
message box
import tkinter.messagebox as mb
anwser = mb.askyesno(title="Confirmer?", message="Voulez-vous quitter ?")
Sauvegarder et charger un fichier
def sauvegarder(texte):
    with open("fichier.txt", "w") as f:
        f.write(texte)

def charger():
    with open("fichier.txt", "r") as f:
        return f.read()
Afficher une image depuis un fichier avec tkinter
from tkinter import PhotoImage

img = PhotoImage(file="image.png")
label = Label(fenetre, image=img)
label.pack()

Solutions

Random number button
import random
from playsound import playsound
import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.geometry(200, 200)

button: ttk.Button = None


def get_rand_int_as_str() -> str:
    r = random.randint(1, 100)
    return str(r)


def change_label():
    if button == None:
        return
    button.configure(text=get_rand_int_as_str())


button = ttk.Button(window, text=get_rand_int_as_str(), command=change_label)

button.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
window.mainloop()
Confirm quit
import tkinter as tk
from tkinter import ttk
import tkinter.messagebox as mb

window = tk.Tk()
window.geometry("200x200")

entered_text = tk.StringVar()
textbox = ttk.Entry(window, textvariable=entered_text)
textbox.pack(pady=50)


def quit_app():
    if len(entered_text.get()) == 0:
        window.destroy()
        return
    anwser = mb.askyesno(title="Confirmer", message="Voulez-vous quitter ?")
    if anwser:
        window.destroy()
        return


run_button = ttk.Button(window, text="Quit 👋", command=quit_app)
run_button.pack()

window.mainloop()

Série 2

  1. Créer une fenêtre qui affiche une image depuis un fichier.
  2. Créer une fenêtre qui affiche une zone de saisie de texte et un bouton. Quand l'utilisateur appuie sur le bouton, l'image dont le nom est définie par le zone de saisie est affichée en dessous.
  3. Avec la librairie playsound, créer une fenêtre qui joue un son quand on clique sur un bouton.
  4. Utiliser tkvideoplayer pour créer une fenêtre qui lit une vidéo.

Solutions

Play music
# importing required module
from playsound import playsound
import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.title("GeeksforGeeks sound player")  # giving the title for our window
window.geometry("500x400")


# making function
def play():
    playsound("sample-3s.mp3")


# title on the screen you can modify it
title = ttk.Label(
    window,
    text="Sample sound",
)
title.pack()

# making a button which trigger the function so sound can be playeed
play_button = ttk.Button(window, text="Play Song", command=play)
play_button.pack()

info = ttk.Label(window, text="Click on the button above to play song ").pack(pady=20)
window.mainloop()

Série 3

  1. En utilisant tkinter.scrolledtext Créer une application qui permet de saisir du texte, de le sauvegarder dans un fichier et de le charger.
  2. Créer une application qui permet de saisir du texte, de le sauvegarder dans un fichier et de le charger. Elle permet aussi de mémoriser la dernière modification et permet de la restaurer à l'aider du bouton "Annuler". Si la modification est restaurée, le bouton "Annuler" devient "Refaire" et permet de rétablir la modification.
  3. Modifier l'application pour mémoriser les 10 dernières modifications, le bouton "Annuler" permet de revenir en arrière et le bouton "Refaire" permet de revenir en avant. Le comportement devrait être similaire aux éditeurs de texte classiques.
  4. Associer les raccourcis clavier à chaque bouton. Par exemple, Ctrl+S pour sauvegarder, Ctrl+Z pour annuler, Ctrl+Y pour refaire, etc.