Tkinter 8.5 - New Mexico Tech
Widgets module ttk - TkDocs
Widgets module ttk - Python Tutorial
Code couleur et typographique
En italique, tous les éléments à remplacer (noms de variables, valeurs numériques, chaînes...) :
en vert les noms de variables (sauf les noms de fenêtres en bleu), en bleu les fenêtres cibles (quelles qu'elles soient),
en gris les valeurs (nombres, chaînes), en rouge les fonctions associées aux widgets ou aux événements (appelées usuellement callback)
et en en violet les événements.
callback
: fonction (sans autre paramètre que event) définie par l'utilisateur.
Rq : les couleurs sont des chaînes (noms ou code hexadécimal, voir plus loin).
Clic sur les titres encadrés en vert → lien vers la page dédiée.
import tkinter as tk
from tkinter import ttk
nom_fenetre = tk.Tk()
nom_fenetre.title(chaîne)
nom_fenetre.geometry('largeur x hauteur + xo + yo')
nom_fenetre['bg']=couleur
nom_fenetre['fg']=couleur
...
nom_fenetre.mainloop()
autre_fenetre = tk.Toplevel()
nom_bouton = ttk.Button(cible, text=chaîne, command=callback).pack()
nom_bouton.state(['disabled'])
, nom_bouton.state(['!disabled'])
command=lambda x,y : callback(x,y) )
si paramètres x, y à transmettre au moment de l'appel.
Label non modifiable :
ttk.Label(cible, text=chaîne).pack()
Label modifiable :
nom_variable = tk.StringVar()
ttk.Label(cible, textvariable=nom_variable).pack()
nom_variable.set(chaîne)
Label avec image :
ttk.Label(cible, image=nom_image_Tkinter).pack()
(voir "Images" plus loin)nom_variable = tk.StringVar()
, ou tk.DoubleVar
ou tk.IntVar
ou tk.BooleanVar
ttk.Entry(cible, textvariable=nom_variable [, width=largeur, autres options]).pack()
nom_variable.set(chaîne)
nom_canvas = tk.Canvas(cible, bg=couleur, height=hauteur , width=largeur ).pack()
nom_canvas.create_line(x1, y1, x2, y2)
nom_canvas.create_rectangle(x1, y1, x2, y2)
nom_canvas.create_oval(x1, y1, x2, y2)
nom_canvas.create_polygon(...)
nom_canvas.create_text(x, y, text=chaîne)
nom_canvas.create_image(largeur,hauteur,image=PhotoImage(file=chemin_fichier))
width=entier, fill=couleur, outline=couleur, activefill=couleur,
state='normal' ou 'disabled' ou 'hidden'
nom_canvas.coords(tagOrId)
(renvoie les coordonnées)nom_canvas.coords(tagOrId, x, y)
(modifie les coordonnées)nom_canvas.move(tagOrId, dx, dy)
nom_canvas.delete(tagOrId)
nom_canvas.itemconfig(tagOrId, attribut=valeur)
itemconfig(tagOrId, fill='blue')
)nom_canvas.findclosest(x, y), find_all(), find_enclosed(), find_overlapping()...
nom_canvas.itemcget(tagOrId, attribut)
itemcget(tagOrId, fill)
renvoie la couleur de l'objet)
nom_canvas.create_rectangle(x1, y1, x2, y2, tags=('rectangle', 'jaune'))
Méthodes
nom_canvas.find_withtag('rectangle')
nom_canvas.gettags(tagOrId)
event.widget.find_withtag("current")
(tag éphémère de l'objet cliqué)Voir événements : tag_bind
nom_variable = tk.StringVar()
nom_variable.set(valeur)
ttk.Radiobutton(cible, text=chaîne, variable=nom_variable, value=valeur1, command=callback).pack()
ttk.Radiobutton(cible, text=chaîne, variable=nom_variable, value=valeur2, command=callback).pack()
nom_variable = tk.IntVar()
nom_variable.set(valeur)
ttk.Checkbutton(cible, text=chaîne, variable=nom_variable, command=callback).pack()
nom_variable =tk.StringVar()
nom_cbbox = ttk.Combobox(cible, textvariable=nom_variable).pack()
nom_cbbox['values'] = (valeur1, valeur2, valeur3...)
nom_cbbox.current(n)
(n est l'index de l'une des valeurs de la liste)nom_ccbox.bind('<<ComboboxSelected>>', callback)
Tous les widgets doivent être positionnés dans la fenêtre à l'aide d'une des trois méthodes suivantes.
pack(padx=entier , pady=entier , side=chaîne, fill=chaîne, expand=1)
grid(row=entier, column=entier, sticky=chaîne, padx=entier , pady=entier)
place(height=entier , width=entier , x=entier , y=entier )
cible.option_add('*tearOff', False)
nom_barre_menu = tk.Menu(cible)
cible['menu'] = nom_barre_menu
nom_menu = tk.Menu(nom_barre_menu)
(autant que de menus)nom_barre_menu.add_cascade(menu=nom_menu, label=chaîne)
(autant que de menus déroulants)nom_menu.add_command(label=chaîne, command=callback)
(autant que d'items par menu déroulant)nom_menu.add_separator()
nom_barre_onglets = ttk.Notebook(cible)
(placement nécessaire)nom_onglet = ttk.Frame(nom_barre_onglets)
(autant que d'onglets, placement nécessaire)nom_barre_onglets.add(nom_onglet, text=chaîne)
(autant que d'onglets)cible.bind(événement, callback)
cible.tag_bind(événement, callback)
Exemples d'événements "event" déclenchés par le clavier :
"<Key>", "<Up>", "<Down>", "<Left>", "<Right>", "<Return>", "<Cancel>", "<F1>", "<Space>", "A", "a", "1"...
Méthodes associées à l'événement event :
event.char
(touche du clavier frappée), event.widget
,...
cible.bind(événement, callback)
cible.tag_bind(événement, callback)
Exemples d'événements "event" déclenchés par la souris :
"<Button-1>", "<Button-3>", "<Double-Button-1>", "<B1-Motion>"
Méthodes associées à l'événement event :
event.x, event.y
(coordonnées du clic)
Code couleur = chaîne hexadécimale. Exemple : '#658ba5'
RED
GREEN
BLUE
Images au format png avec Pyzo, utiliser de préférence un chemin relatif (voir "Chemins" plus loin).
chemin_fichier = chaîne
nom_image_Tkinter = tk.PhotoImage(file=chemin_fichier)
(crée une image au format Tkinter).
Exemples :
ttk.Label(cible, image=nom_image_Tkinter)
Ou bien
nom_objet = nom_canvas.create_image(x,y, image=nom_image_Tkinter)
Attention, pour utiliser une image, il existe deux façons de procéder :
tk.PhotoImage(file='U:\\mon_dossier\\informatique\\projet\\nom_image.png')
;Attention, avec pyzo, en cas de message d'erreur se terminant par : _tkinter.TclError: couldn't open "nom_image": no such file or directory. Il faut corriger l'erreur puis redémarrer le shell avant de relancer une exécution.
Pour déterminer le chemin jusqu’à un fichier,
afficher l’arborescence dans Pyzo (menu Outils/File browser), faire un clic droit sur le fichier, copier/coller le chemin puis remplacer \ par \\
Le chemin U:\mon_dossier\informatique\projet\nom_image.png s'écrit dans pyzo : 'U:\\mon_dossier\\informatique\\projet\\nom_image.png'.
import simpleaudio as sa
wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav")
play_obj = wave_obj.play()
play_obj.wait_done()
Chemin absolu (liens externes) :
'https://fr.wikipedia.org/wiki/Wikip%C3%A9dia'
.
Chemin relatif (liens internes) :
'images/image.png'
("image.png" situé dans le sous-dossier "images" du dossier courant).
'../images/image.png'
("image.png" situé dans le sous-dossier "images" du dossier parent du dossier courant).
Avec Pyzo, si le message d'erreur _tkinter.TclError: couldn't open nom_fichier: no such file or directory
s'affiche, redémarrer le shell.
Pour déterminer le chemin jusqu’à un fichier,
afficher l’arborescence dans Pyzo (menu Outils/File browser), faire un clic droit sur le fichier, copier/coller le chemin puis remplacer \ par \\
Le chemin U:\mon_dossier\informatique\projet\mon_image.png s'écrit dans pyzo : 'U:\\mon_dossier\\informatique\\projet\\mon_image.png'.