Aller au contenu

Tkinter

Tkinter est une bibliothèque graphique pour Python. Elle permet de créer des interfaces graphiques (GUI) de manière simple et rapide.

Premiers pas

Sur macOS, il faut probabelemnt installer la librairie pip install tk

Fenêtre basqiue
import tkinter as tk

window = tk.Tk()

window.mainloop()

Fenêtre basqiue

Deux boutons et un texte
import tkinter as tk

# widget ou controle: tout composant de l'interface graphique: bouton, label, image, etc. (windows + gadget)

window = tk.Tk()
window.geometry("600x300")

label = tk.Label(window, text="Hello World")


def print_message():
    print("Button clicked")


def change_size():
    print("Nouvelle dimension de fenêtre")
    window.geometry("500x200")


# command: on dit que c'est une callback
button = tk.Button(window, text="Click Me", command=print_message)
button2 = tk.Button(window, text="Click Me Here", command=change_size)
# Lay or put the widgets into the window
button.pack()
label.pack()
button2.pack()
# pour placer une ligne de code
tk.Label(window, text="Autre texte").pack()

window.mainloop()

Deux boutons et un texte

TTk

Les composants ttk sont des composants améliorés de Tkinter. Ils sont plus modernes, plus jolis et s'adaptent mieux à l'OS (Operating System). Par exemple, ils utilisent les couleurs du thème de l'OS (mode sombre par exemple).

Composants ttk
import tkinter as tk
from tkinter import ttk

# widget: tout composant de l'interface graphique: bouton, label, image, etc. (windows + gadget)

window = tk.Tk()
window.geometry("600x300")

label = ttk.Label(window, text="Hello World")


def print_message():
    print("Button clicked")


def change_size():
    print("Nouvelle dimension de fenêtre")
    window.geometry("500x200")


# command: on dit que c'est une callback
button = ttk.Button(window, text="Click Me", command=print_message)
button2 = ttk.Button(window, text="Click Me Here", command=change_size)
button.pack()
label.pack()
button2.pack()
# pour placer une ligne de code
ttk.Label(window, text="Autre texte").pack()

window.mainloop()

Composants ttk

Texte editable

Texte editable
import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.geometry("600x300")

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


def run_prompt():
    print("prompt saisi", entered_text.get())
    print("prompt saisi", textbox.get())
    response = f"Réponse à la main pour le prompt {entered_text.get()}. A remplacer par une vraie réponse"
    print("réponse", response)


def reset_entry():
    entered_text.set("")


run_button = ttk.Button(window, text="Run", command=run_prompt)
run_button.pack()

clear_button = ttk.Button(window, text="Clear", command=reset_entry)
clear_button.pack()

window.mainloop()

Texte editable

Texte editable + ajout de contenu à la volée
import tkinter as tk
from tkinter import ttk
from datetime import datetime


prompts = []

window = tk.Tk()
window.geometry("600x300")

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


def run_prompt():
    print("prompt saisi", entered_text.get())
    print("prompt saisi", textbox.get())
    response = f"Réponse à la main pour le prompt {entered_text.get()}. A remplacer par une vraie réponse"
    print("réponse", response)
    prompt = {
        "query": entered_text.get(),
        "response": response,
        "date": datetime.now(),
    }
    prompts.append(prompt)
    print(prompts)
    temp_history_content = ""
    for prompt in prompts:
        temp_history_content += f"query: {prompt['query']} \n"
        temp_history_content += f"responst: {prompt['response']} \n"
        temp_history_content += f"date: {prompt['date']} \n"
        temp_history_content += f"\n--------------\n"
    history_content.set(temp_history_content)


def reset_entry():
    entered_text.set("")


run_button = ttk.Button(window, text="Run", command=run_prompt)
run_button.pack()

clear_button = ttk.Button(window, text="Clear", command=reset_entry)
clear_button.pack()

history = ttk.Label(window, textvariable=history_content)
history.pack()

window.mainloop()

Texte editable + ajout de contenu à la volée