Skip to content

Tkinter

Tkinter is a graphical library for Python. It allows you to create graphical user interfaces (GUIs) in a simple and quick manner.

Getting Started

On macOS, you might need to install the library with pip install tk.

Basic Window
import tkinter as tk

window = tk.Tk()

window.mainloop()

Basic Window

Two Buttons and a Text
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()

Two Buttons and a Text

TTk

The ttk components are improved components of Tkinter. They are more modern, more visually appealing, and better adapt to the OS (Operating System). For example, they use the colors of the OS theme (such as dark mode).

ttk Components
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()

ttk Components

Editable Text

Editable Text
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()

Editable Text

Editable Text + Adding Content on the Fly
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()

Editable Text + Adding Content on the Fly