tkinter: nouvelle fenêtre - dialogue

f - Création de fenêtres & boîtes de dialogues



Création d'une nouvelle fenêtre

Boîtes de dialogue

Pour les interactions les plus plus simples, il existe des boîtes de dialogue simples, par exemple pour afficher simplement une information avec showinfo de la bibliothèque messagebox:
from tkinter import *
from tkinter.messagebox import *

def affich():
    showinfo("Une info ?","Une info !")
    btn.config(text="Revoir l'info ?")



gui=Tk()
gui.title("Boîtes de message")

info=Label(gui,text="Besoin d\'une info ?",font="arial 14 bold")
info.pack()

btn=Button(gui,text="click me !",bg='yellow',fg='red',command=affich)
btn.pack()


gui.mainloop()
pour obtenir
D'autres boîtes de dialogue existent aussi, comme askstring (pour un mot de passe par exemple), ou askopenfilename pour ouvrir un fichier … voir les bibilothèques messagebox, simpledialog et filedialog de tkinter.

Par exemple, avec une boîte de dialogue pour demander une confirmation, une autre pour afficher une info:
# -*- coding: utf-8 -*-
from tkinter import *
from tkinter.messagebox import *

gui=Tk()

def callback():
    ans=askyesno('Titre 1', 'Êtes-vous sûr de vouloir faire ça?')
    if ans:
        showwarning('Ok', 'Super !')
    else:
        showinfo('No', 'Tant pis ...')
        showerror("No", "Une autre fois ....")

btn=Button(text='Action', command=callback)
btn.pack(padx=10,pady=10)

gui.mainloop()

Création avec Toplevel

On a créé et utilisé jusqu'ici une interface contenue dans une, et une seule, fenêtre.
On peut décider aussi d'en créé et utiliser plusieurs, comme avec l'exemple très courant d'une feêtre "pop-up" pour demander la confirmation d'une action.
Le widget Toplevel est destiné justement à afficher des fenêtres supplémentaires. Chaque fenêetre ainsi ouverte se manipule alors comme la fenêtre principale, par exemple:
from tkinter import *
gui=Tk()

def ConfirmWindow():
    newWindow = Toplevel(gui)
    lbl=Label(newWindow,text="Quitter ?")
    lbl.pack(side=TOP,pady=10)
    btnQuitNew=Button(newWindow,text="No",command=newWindow.destroy)
    btnQuitNew.pack(side=LEFT)
    btnQuitAll=Button(newWindow,text="Yes",command=gui.destroy)
    btnQuitAll.pack(side=RIGHT)

btn = Button(gui, text="Click ?",command=ConfirmWindow)
btn.pack(padx=10,pady=10)

gui.mainloop()
qui permet, via un bouton dans la fenêtre principale gui d'en ouvrir une deuxième, et dans laquelle on créé une zone de texte Label ainsi que 2 boutons:

Top Programmation en python



Quelques liens vers d'autres ressources: