1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
from tkinter import *
class Clients():
"client choisi dans la liste pour comparer l'évolution de ses commandes"
def __init__(self, cli):
self.cli = cli
class Produits():
"nom du produit choisi pour les comparaisons"
def __init__(self, nmp):
self.nmp = nmp
class DtAn():
"Année choisie"
def __init__(self, dateAn):
self.dateAn = dateAn
# ------------- fenetre 1 ---------------------------------------------------------------
def open_Toplevel_1():
top_1 = Toplevel()
top_1.title("Fenetre Toplevel_1")
top_1.geometry("400x400+600+200")
#---
top_1.transient(fen) # Place la fenêtre fille au-dessus de la fenêtre parent
top_1.grab_set() # Empêche l'utilisateur d'interagir avec la fenêtre parent
top_1.focus_set() # Donne le focus à la fenêtre fille top_1
#---
v0=str(L0.get(L0.curselection())) # ; print(v0) # Choix du client
client.cli = v0 # modif de la valeur nom du client
#---
tx_l25_1 = "Les differents choix dans ces listes vont permettre de construire \n"
tx_l25_2 = " plusieurs requetes SQL differentes afin de comparaisons \n"
tx_l25_3 = " Les résultats seront presentés dans les toplevel_2 multiples"
label_25 = Label(top_1, text=tx_l25_1 + tx_l25_2 + tx_l25_3)
label_25.place(x=10, y= 200)
bt_1 = Button(top_1, text = "vers toplevel_2 pour voir les achats de cet article " \
, state= "disabled", width=40, command = open_Toplevel_2)
bt_1.pack()
bt_2 = Button(top_1, text = "Quitter", width=12, command = top_1.destroy)
bt_2.pack()
L1=Listbox(top_1,width=15, height=4)
L1.place(x=50 , y=100)
produits=('Produit_Bleu','Produit_Blanc','Produit_Rouge','Produit_Vert')
L2=Listbox(top_1,width=8, height=4)
L2.place(x=150 , y=100)
annees=('2022','2023','2024','2025')
for item in produits:
L1.insert(END, item)
for item in annees:
L2.insert(END, item)
#---
def choixP(evt): # choix des produits
if not evt.widget.curselection(): # indispensable pour eviter une erreur
return
v1=str(L1.get(L1.curselection())) # ; print(v1)
produit_p.nmp = v1 # modif de l'attribut d'instance 'nom du produit'
#---
def cxAn(evt): # choix de l'année'
if not evt.widget.curselection(): # indispensable
return
v2=str(L2.get(L2.curselection())) # ; print(v2)
date_a.dateAn = v2 # modif de l'attribut d'instance 'date'
if date_a.dateAn !='' and produit_p.nmp !='': bt_1.config(state="active")
""" evite l'erreur de non choix """
L1.bind("<<ListboxSelect>>", choixP)
L2.bind("<<ListboxSelect>>", cxAn)
#---
tx01=StringVar() ; tx01.set(v0)
E0=Entry(top_1, textvariable=tx01, width=15) # affiche le nom du client (liste L0)
E0.place(x=50, y=300)
#---
top_1.mainloop()
#----------- fenetre 2 ------------------------------------------------------------------------
def open_Toplevel_2():
def autrechoix():
"supprimer le transient de top_2 pour rendre la main à top_1"
# top_2.transient(parent=None)
# top_2.iconify(fen)
top_2 = Toplevel()
top_2.title("Fenetre Toplevel_2")
top_2.geometry("300x200")
#---
## top_2.transient() # Place la fenêtre fille au-dessus de la fenêtre parent
top_2.focus_set() # Donne le focus à la fenêtre fille top_2
## top_2.grab_set() # Empêche l'interaction avec la fenêtre parent
#---
label_2 = Label(top_2, text = "Fenetre TopLevel N° 2 ")
label_2.pack()
#---
txt25_1 = "Ici seront affichés les commandes de: " + produit_p.nmp + '\n'
txt25_2 = "effectués par le client: " + client.cli + '\n'
txt25_3 = " pendant toute l'année: " + date_a.dateAn + '\n'
label_25 = Label(top_2, text = txt25_1 + txt25_2 + txt25_3)
label_25.pack()
bt_1 = Button(top_2, text="Autre choix", width=10, command=autrechoix)
bt_1.place(x=210, y= 170)
# print(fen.geometry()) # donne les coordonées et taille de 'fen' OK
# print(bt_2.winfo_x()) # ------- ne fonctionne pas ! ! ! ?
## print(produit_p.nmp)
## print(date_a.dateAn)
top_2.mainloop()
#==================================================================================================
fen = Tk()
fen.title("Fenetre principale 'fen'")
fen.geometry("450x400+400+200")
client = Clients # 1 instanciation de la classe Clients
produit_p = Produits # 1 instanciation de la classe Produits
date_a = DtAn # 1 instanciation de la classe DtAn
""" Pour éviter l'ultilisation de variables globales les attributs d'instance de ces trois classes
accessibles partout, garderons en mémoire le résultat des differents choix de l'utilsateur """
bt_0 = Button(fen, text = "vers toplevel_1 pour voir un article acheté", command = open_Toplevel_1)
bt_0.place(x =140, y =50)
label_0 = Label(fen, text = "Fenetre 'fen' ")
label_0.pack()
L0=Listbox(fen,width=10, height=4)
L0.place(x=50, y=150)
Clients=('Durand', 'Martin', 'Dupont', 'Smith')
for item in Clients:
L0.insert(END, item)
fen.mainloop() |
Partager