Blocage sur code avec tkinter récupération valeur étiquette

Résolu
dpiou Messages postés 3 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 22 mai 2015 - 21 mai 2015 à 12:52
 dpiou - 26 mai 2015 à 12:00
Bonjour à toute la communauté,

Je me lance à faire une interface graphique via Tkinter seulement je bloque depuis un peu de temps sur un souci mineur. Je souhaiterai avoir un peu d'aide concernant mon mini programme.
Il consiste à calculer la puissance d'un local en fonction d'un coefficient à appliquer et ensuite écrire le tout dans un fichier texte.
Sa fonctionne très bien sans l'interface graphique et depuis sa fonctionne plus.
Le code n'est pas très propre mais sa fonctionne bien.

Merci par avance à ceux qui voudrons bien y jeter un coup d'oeil.

Cordialement à vous tous.




#-------------------------------------------------------------------------------
# Name: Puissances des locaux
# Purpose:
#
# Author: Damien PUAUD
#
# Created: 23/10/2014
# Copyright: (c) dpu 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------

def main():
pass

if __name__ == '__main__':
main()


#-*- coding : Latin -1 -*-


import os


from Tkinter import*# importation de la bibliotheque graphique Tkinter

def fen1():
fenetre1=Tk()# creation d'une fenetre
fenetre1.title('Surface')
fenetre1.geometry("400x200+400+200")

etiquette=Label(fenetre1)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre1,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre1)# creation d'une etiquette
etiquette1.configure(text='Quel est la surface du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre1,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

bouton=Button(fenetre1)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre1.destroy,underline=0)#underline = soulignage lettre
bouton.pack()




def nom_du_local_fen1_saisir():
xnom=(saisir.get())
return (eval(xnom))

def surface_du_local_fen1_saisie():
xsurf=(saisie.get())
return (eval(xsurf))

def fen2():
fenetre2=Tk()# creation d'une fenetre
fenetre2.title('Définition de la surface')
fenetre2.geometry("400x200+400+200")

etiquette=Label(fenetre2)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre2,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre2)# creation d'une etiquette
etiquette1.configure(text='Quel est la largeur du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre2,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

etiquette2=Label(fenetre2)# creation d'une etiquette
etiquette2.configure(text='Quel est la longeur du local?',fg='blue')
etiquette2.pack()
saisir2=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir2.set("")
saisie2=Entry(fenetre2,textvariable=saisir2,justify=CENTER)# creation d'une zone de saisie
saisie2.configure(fg='red',bd=5)
saisie2.pack() #integration du widget dans la fenetre
bouton=Button(fenetre2)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre2.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


def nom_du_local_fen2_saisir():
xnom=(saisir.get())
return (eval(xnom))

def largeur_du_local_fen2_saisir1():
xlarg=(saisie.get())
return (eval(xlarg))

def longeur_du_local_fen2_saisir2():
xlong=(saisie.get())
return (eval(xlong))

fenetre=Tk()# creation d'une fenetre
fenetre.title('Programme réalisé par Damien PUAUD')
fenetre.geometry("400x200+400+200")

etiquette=Label(fenetre)# creation d'une etiquette
etiquette.configure(text='Quel est la hauteur des locaux?',fg='blue')
etiquette.pack()

saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("2.5")
saisie=Entry(fenetre,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

def saisi():
xhaut=(saisir.get())
return (eval(xhaut))

etiquette1=Label(fenetre)# creation d'une etiquette
etiquette1.configure(text='Quel est le coefficient a utiliser?',fg='blue')
etiquette1.pack()

saisir1=StringVar()
saisir1.set("30")
saisie1=Entry(fenetre,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre


def saisi1():
xcoef=saisir1.get()
return (eval(xcoef))

choix=IntVar()# creation d'une variable Tkinter
choix.set(1) # initialisation de la variable choix
case1=Radiobutton(fenetre)# creation de cases a cocher
case1.configure(text='Entree la surface',variable=choix,value="1",command=fen1)
case2=Radiobutton(fenetre)
case2.configure(text='Définir surface',variable=choix,value="2",command=fen2)
case3=Radiobutton(fenetre)
case3.configure(text='Quitter',variable=choix,value="3",command=fenetre.destroy)
case1.pack()
case2.pack()
case3.pack()

bouton=Button(fenetre)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


fenetre.mainloop()# attente des evenements

oquitter=""

while oquitter !="o":#Bouclage du programme

xdef=choix.get() #choix des cases radio boutton

if xdef==1:
xnom=nom_du_local_fen1_saisir()
xsurf=int(nom_du_local_fen1_saisir)
xvol=xsurf*saisi()#Calcul du volume de la pièce
xpuis=saisi1()*xvol#Calcul de la puissance
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==2:
xnom=raw_input("Quel est le nom du local? ")
xlarg=int((input("Quel est la largeur: ")))
xlong=int((input("Quel est la longueur: ")))
xvol=xlarg*xlong*xhaut
xpuis=xvol*xcoef
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==3:
oquitter=raw_input("Et tu sur de vouloir quitter o/n ? ") #Fin du bouclage
if oquitter=="o":
Print("Le fichier texte est creer")
else:
Print("Veuillez selectionner une autre réponse ")

xfichier.close() #Fermeture du fichier texte

os.system("pause")
A voir également:

5 réponses

Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
21 mai 2015 à 12:58
Salut, mets ton code entre balises s'il te plait, ça facilite le test, sinon on est obligé d'indenter les lignes concernées et c'est fastidieux. Utilise pour cela le micro-menu dans la boite d'édition de ton message.Merci.
--
1
dpiou Messages postés 3 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 22 mai 2015
21 mai 2015 à 13:13
Salut Mints,

Voilà le code sous balise...

cdt.

<
#-------------------------------------------------------------------------------
# Name: Puissances des locaux
# Purpose:
#
# Author: Damien PUAUD
#
# Created: 23/10/2014
# Copyright: (c) dpu 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------

def main():
pass

if __name__ == '__main__':
main()


#-*- coding : Latin -1 -*-


import os


from Tkinter import*# importation de la bibliotheque graphique Tkinter

def fen1():
fenetre1=Tk()# creation d'une fenetre
fenetre1.title('Surface')
fenetre1.geometry("400x200+400+200")

etiquette=Label(fenetre1)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre1,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre1)# creation d'une etiquette
etiquette1.configure(text='Quel est la surface du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre1,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

bouton=Button(fenetre1)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre1.destroy,underline=0)#underline = soulignage lettre
bouton.pack()




def nom_du_local_fen1_saisir():
xnom=(saisir.get())
return (eval(xnom))

def surface_du_local_fen1_saisie():
xsurf=(saisie.get())
return (eval(xsurf))

def fen2():
fenetre2=Tk()# creation d'une fenetre
fenetre2.title('Définition de la surface')
fenetre2.geometry("400x200+400+200")

etiquette=Label(fenetre2)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre2,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre2)# creation d'une etiquette
etiquette1.configure(text='Quel est la largeur du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre2,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

etiquette2=Label(fenetre2)# creation d'une etiquette
etiquette2.configure(text='Quel est la longeur du local?',fg='blue')
etiquette2.pack()
saisir2=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir2.set("")
saisie2=Entry(fenetre2,textvariable=saisir2,justify=CENTER)# creation d'une zone de saisie
saisie2.configure(fg='red',bd=5)
saisie2.pack() #integration du widget dans la fenetre
bouton=Button(fenetre2)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre2.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


def nom_du_local_fen2_saisir():
xnom=(saisir.get())
return (eval(xnom))

def largeur_du_local_fen2_saisir1():
xlarg=(saisie.get())
return (eval(xlarg))

def longeur_du_local_fen2_saisir2():
xlong=(saisie.get())
return (eval(xlong))

fenetre=Tk()# creation d'une fenetre
fenetre.title('Programme réalisé par Damien PUAUD')
fenetre.geometry("400x200+400+200")

etiquette=Label(fenetre)# creation d'une etiquette
etiquette.configure(text='Quel est la hauteur des locaux?',fg='blue')
etiquette.pack()

saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("2.5")
saisie=Entry(fenetre,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

def saisi():
xhaut=(saisir.get())
return (eval(xhaut))

etiquette1=Label(fenetre)# creation d'une etiquette
etiquette1.configure(text='Quel est le coefficient a utiliser?',fg='blue')
etiquette1.pack()

saisir1=StringVar()
saisir1.set("30")
saisie1=Entry(fenetre,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre


def saisi1():
xcoef=saisir1.get()
return (eval(xcoef))

choix=IntVar()# creation d'une variable Tkinter
choix.set(1) # initialisation de la variable choix
case1=Radiobutton(fenetre)# creation de cases a cocher
case1.configure(text='Entree la surface',variable=choix,value="1",command=fen1)
case2=Radiobutton(fenetre)
case2.configure(text='Définir surface',variable=choix,value="2",command=fen2)
case3=Radiobutton(fenetre)
case3.configure(text='Quitter',variable=choix,value="3",command=fenetre.destroy)
case1.pack()
case2.pack()
case3.pack()

bouton=Button(fenetre)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


fenetre.mainloop()# attente des evenements

oquitter=""

while oquitter !="o":#Bouclage du programme

xdef=choix.get() #choix des cases radio boutton

if xdef==1:
xnom=nom_du_local_fen1_saisir()
xsurf=int(nom_du_local_fen1_saisir)
xvol=xsurf*saisi()#Calcul du volume de la pièce
xpuis=saisi1()*xvol#Calcul de la puissance
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==2:
xnom=raw_input("Quel est le nom du local? ")
xlarg=int((input("Quel est la largeur: ")))
xlong=int((input("Quel est la longueur: ")))
xvol=xlarg*xlong*xhaut
xpuis=xvol*xcoef
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==3:
oquitter=raw_input("Et tu sur de vouloir quitter o/n ? ") #Fin du bouclage
if oquitter=="o":
Print("Le fichier texte est creer")
else:
Print("Veuillez selectionner une autre réponse ")

xfichier.close() #Fermeture du fichier texte

os.system("pause")></code>
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
21 mai 2015 à 13:34
Ah non toujours pas, ça doit donner un truc comme ça quand tu cliques sur 'Prévisualiser':
from Tkinter import*# importation de la bibliotheque graphique Tkinter

def fen1():
    fenetre1=Tk()# creation d'une fenetre
    fenetre1.title('Surface')
    fenetre1.geometry("400x200+400+200")


--
0
dpiou Messages postés 3 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 22 mai 2015
22 mai 2015 à 07:57
Salut Mints, désolé je n'ai pas internet à la maison...
Et voilà le code entre balise...

#-------------------------------------------------------------------------------
# Name: Puissances des locaux
# Purpose:
#
# Author: Damien PUAUD
#
# Created: 23/10/2014
# Copyright: (c) dpu 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------

def main():
pass

if __name__ == '__main__':
main()


#-*- coding : Latin -1 -*-


import os


from Tkinter import*# importation de la bibliotheque graphique Tkinter

def fen1():
fenetre1=Tk()# creation d'une fenetre
fenetre1.title('Surface')
fenetre1.geometry("400x200+400+200")

etiquette=Label(fenetre1)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre1,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre1)# creation d'une etiquette
etiquette1.configure(text='Quel est la surface du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre1,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

bouton=Button(fenetre1)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre1.destroy,underline=0)#underline = soulignage lettre
bouton.pack()




def nom_du_local_fen1_saisir():
xnom=(saisir.get())
return (eval(xnom))

def surface_du_local_fen1_saisie():
xsurf=(saisie.get())
return (eval(xsurf))

def fen2():
fenetre2=Tk()# creation d'une fenetre
fenetre2.title('Définition de la surface')
fenetre2.geometry("400x200+400+200")

etiquette=Label(fenetre2)# creation d'une etiquette
etiquette.configure(text='Quel est le nom du local?',fg='blue')
etiquette.pack()
saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("")
saisie=Entry(fenetre2,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

etiquette1=Label(fenetre2)# creation d'une etiquette
etiquette1.configure(text='Quel est la largeur du local?',fg='blue')
etiquette1.pack()
saisir1=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir1.set("")
saisie1=Entry(fenetre2,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre

etiquette2=Label(fenetre2)# creation d'une etiquette
etiquette2.configure(text='Quel est la longeur du local?',fg='blue')
etiquette2.pack()
saisir2=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir2.set("")
saisie2=Entry(fenetre2,textvariable=saisir2,justify=CENTER)# creation d'une zone de saisie
saisie2.configure(fg='red',bd=5)
saisie2.pack() #integration du widget dans la fenetre
bouton=Button(fenetre2)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre2.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


def nom_du_local_fen2_saisir():
xnom=(saisir.get())
return (eval(xnom))

def largeur_du_local_fen2_saisir1():
xlarg=(saisie.get())
return (eval(xlarg))

def longeur_du_local_fen2_saisir2():
xlong=(saisie.get())
return (eval(xlong))

fenetre=Tk()# creation d'une fenetre
fenetre.title('Programme réalisé par Damien PUAUD')
fenetre.geometry("400x200+400+200")

etiquette=Label(fenetre)# creation d'une etiquette
etiquette.configure(text='Quel est la hauteur des locaux?',fg='blue')
etiquette.pack()

saisir=StringVar()#prévoir la variable pour recevoir le texte saisi
saisir.set("2.5")
saisie=Entry(fenetre,textvariable=saisir,justify=CENTER)# creation d'une zone de saisie
saisie.configure(fg='red',bd=5)
saisie.pack() #integration du widget dans la fenetre

def saisi():
xhaut=(saisir.get())
return (eval(xhaut))

etiquette1=Label(fenetre)# creation d'une etiquette
etiquette1.configure(text='Quel est le coefficient a utiliser?',fg='blue')
etiquette1.pack()

saisir1=StringVar()
saisir1.set("30")
saisie1=Entry(fenetre,textvariable=saisir1,justify=CENTER)# creation d'une zone de saisie
saisie1.configure(fg='red',bd=5)
saisie1.pack() #integration du widget dans la fenetre


def saisi1():
xcoef=saisir1.get()
return (eval(xcoef))

choix=IntVar()# creation d'une variable Tkinter
choix.set(1) # initialisation de la variable choix
case1=Radiobutton(fenetre)# creation de cases a cocher
case1.configure(text='Entree la surface',variable=choix,value="1",command=fen1)
case2=Radiobutton(fenetre)
case2.configure(text='Définir surface',variable=choix,value="2",command=fen2)
case3=Radiobutton(fenetre)
case3.configure(text='Quitter',variable=choix,value="3",command=fenetre.destroy)
case1.pack()
case2.pack()
case3.pack()

bouton=Button(fenetre)# creation d'un bouton
bouton.configure(text='Quitter',bg='white',command=fenetre.destroy,underline=0)#underline = soulignage lettre
bouton.pack()


fenetre.mainloop()# attente des evenements

oquitter=""

while oquitter !="o":#Bouclage du programme

xdef=choix.get() #choix des cases radio boutton

if xdef==1:
xnom=nom_du_local_fen1_saisir()
xsurf=int(nom_du_local_fen1_saisir)
xvol=xsurf*saisi()#Calcul du volume de la pièce
xpuis=saisi1()*xvol#Calcul de la puissance
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==2:
xnom=raw_input("Quel est le nom du local? ")
xlarg=int((input("Quel est la largeur: ")))
xlong=int((input("Quel est la longueur: ")))
xvol=xlarg*xlong*xhaut
xpuis=xvol*xcoef
print "La puissance du local est de ",xpuis,"watts"
xfichier= open("Puissances des locaux.txt", "a")#Création du fichier texte et écriture
print >> xfichier,'\n' "Local:",xnom,"" '\n' "Puissance :", xpuis,"watts "#Ecriture du texte

elif xdef==3:
oquitter=raw_input("Et tu sur de vouloir quitter o/n ? ") #Fin du bouclage
if oquitter=="o":
Print("Le fichier texte est creer")
else:
Print("Veuillez selectionner une autre réponse ")

xfichier.close() #Fermeture du fichier texte

os.system("pause")
0
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77 > dpiou Messages postés 3 Date d'inscription jeudi 21 mai 2015 Statut Membre Dernière intervention 22 mai 2015
22 mai 2015 à 23:17
Bonsoir,

Il est préférable d'avoir une seule fenêtre principale:
def fen1():
    fenetre1=Tk()# creation d'une fenetre

def fen2():
    fenetre2=Tk()# creation d'une fenetre
    fenetre2.title('Définition de la surface')

fenetre=Tk()# creation d'une fenetre
fenetre.title('Programme réalisé par Damien PUAUD')


Avec l'instruction:
fenetre.mainloop()# attente des evenements 

les évenements de fenetre1 et fenetre2 ne sont jamais pris en compte.



Si vous souhaitez afficher successivement différents écrans, voici un exemple:
# -*- coding: ISO-8859-15 -*-

from Tkinter import*

def bouton1():
    frame1.pack_forget() #Masque frame1 ainsi que tous les objets contenus dans frame1
    frame2.pack() #Affiche frame2 ainsi que tous les objets contenus dans frame2
    fenetre1.title('Définition de la surface')

def bouton2():
    frame2.pack_forget()
    frame1.pack()
    fenetre1.title('Surface')

#Création de la fenetre-racine de l'application
fenetre1=Tk()
fenetre1.title('Surface')
fenetre1.geometry("400x200+400+200")

#Création d'un cadre conteneur (1)
frame1 = Frame(fenetre1)
frame1.pack()
#Widgets inclus dans frame1
etiquette=Label(frame1)# creation d'une etiquette
etiquette.configure(text='FRAME1-Quel est le nom du local?',fg='blue')
etiquette.pack()
bouton1=Button(frame1,text='Bouton 1',bg='white',command=bouton1)
bouton1.pack()

#Création d'un cadre conteneur (2)
frame2 = Frame(fenetre1)
#Widgets inclus dans frame2
etiquette=Label(frame2)# creation d'une etiquette
etiquette.configure(text='FRAME2-Quel est la largeur du local?',fg='blue')
etiquette.pack()
bouton2=Button(frame2,text='Bouton 2',bg='white',command=bouton2)# creation d'un bouton
bouton2.pack()

fenetre1.mainloop()# attente des evenements




Le code situé après l'instruction :
fenetre.mainloop()# attente des evenements

sera exécuté après avoir appuyer sur le bouton <Quitter> qui termine Tkinter, ce qui vous oblige à utiliser l'instruction<raw_input("Quel est le nom du local? ")> pour communiquer.
Tkinter propose des outils de communication par messages:
from tkMessageBox import showinfo, askyesno




En programmation évenementielle, l'action est déclenchée par l'utilisateur (clavier, souris) et chaque action est gerée par l'appel d'une fonction associée au widget (bouton, bouton radio, zone de saisie...)
Tout le code doit être situé avant l'instruction <fenetre.mainloop>

Pour en savoir plus sur Tkinter voici in lien vers une doc en français:
http://ateliers.mse.free.fr/tkinter/tkinter-ref5.pdf

Yapuka...
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
Modifié par Mints le 23/05/2015 à 13:14
Effectivement comme le dit lespinx le placement de la mainloop est important car une fois lancé le programme tournera grâce à elle.
Cette méthode sert à intercepter les évènements utilisateur et invoquer les fonctions que tu leur aura liées, elle sert aussi à mettre à jour les attributs de widgets et leur affichage. Tu ne peux non plus imbriquer une autre boucle while avant elle, auquel cas elle interrompra le déroulement du programme.(c'est le cas des tkMessageBox qui ont leur propre mainloop qui se stop après le choix d'une réponse)
Au niveau présentation on doit mettre d'abord le standard de codage suivi des imports, suivi des méthodes, suivi de l'entrée principale du programme.
A titre d'exemple j'ai réalisé ce petit prog dont tu pourra si tu veux t'inspirer pour les prochains que tu fera :

#-*- coding : Latin -1 -*-

from Tkinter import*

def surface_metres_carres():
    "Méthode qui rend le champ de saisie de la surface en mêtres carres valide."
    
    entreeLargeur.config(state=DISABLED)
    entreeLongueur.config(state=DISABLED)
    entreeMetresCarres.config(state=NORMAL)

def surface_Lxl():
    "Méthode qui rend le champ de saisie de la surface en longueur par largeur valide."    
    
    entreeLargeur.config(state=NORMAL)
    entreeLongueur.config(state=NORMAL)
    entreeMetresCarres.config(state=DISABLED)    

def calculer_puissance():
    "Méthode qui calcule la puissance du local et qui la sauvegarde."    

    # on s'assure que le nom du local n'est un ensemble d'espaces ou un champ vide ('')
    nomValide = False
    for c in entreeNomLocal.get():
        if c != ' ':
            nomValide = True
    if not nomValide or entreeNomLocal.get() == '':
        entreeNomLocal.delete(0,END)
        entreeNomLocal.insert(0,'sans nom')
        
    # si la surface a été entrée en m²
    if choixSurface.get() == 0:
        # si les entrees ne sont pas convertibles en décimal (présence d'une letrre par ex) on part de la méthode
        try:
            float(entreeMetresCarres.get())
            float(entreeHauteur.get())
            float(entreeCoefficient.get())
        except:
            return

        puissance = float(entreeMetresCarres.get())*float(entreeHauteur.get())*float(entreeCoefficient.get())
        l = [entreeNomLocal.get(),entreeMetresCarres.get(),entreeHauteur.get(),entreeCoefficient.get()]

    # si la surface a été entrée sous la forme Lxl
    elif choixSurface.get() == 1:
        try:
            float(entreeLargeur.get())            
            float(entreeLongueur.get())
            float(entreeHauteur.get())
            float(entreeCoefficient.get())
        except:
            return
        
        puissance = float(entreeLargeur.get())*float(entreeLongueur.get())*float(entreeHauteur.get())*float(entreeCoefficient.get())
        # on rajoute un 'x' antre la largeur et la longueur pour la définition de la surface
        l = [entreeNomLocal.get(),entreeLargeur.get()+'x'+entreeLongueur.get(),entreeHauteur.get(),entreeCoefficient.get()]

    labelPuissance.config(text='Puissance : '+str(round(puissance,2))+' W')

    # si le local existait déja on le met à jour sinon on l'ajoute à la liste des locaux
    surfaceDejaPresente = False
    for liste in listeLocaux:
        if entreeNomLocal.get() == liste[0]:
            surfaceDejaPresente = True
            break
    if not surfaceDejaPresente:
        listeLocaux.append(l)
    else:
        listeLocaux[listeLocaux.index(liste)] = l

    # on met à jour la listebox
    listeBox.delete(0,END)
    for liste in listeLocaux:
        listeBox.insert(END,liste[0])

    # on sauvegarde la liste des locaux
    fichier = open('puissanceLocal.txt','w')
    fichier.write(str(listeLocaux))
    fichier.close()
    
def clic(event):
    "Méthode qui remplie les champs de l'interface en fonction du local choisi dans la listebox."

    i = listeBox.curselection()
    if i:
        # rappel : listeLocaux contient tous les locaux sous la forme [nom,surface,hauteur,coeff] où surface peut être directement en m² ou en Lxl
        for liste in listeLocaux:
            if liste[0] == listeBox.get(i):
                entreeNomLocal.delete(0,END)
                entreeNomLocal.insert(0,liste[0])
                if 'x' in liste[1]:
                    choixSurface.set(1)
                    surface_Lxl()        
                    Lxl = liste[1].split('x') # si la surface est de la forme Lxl on remplie une mini-liste de la Largeur et la longueur en la splitant à l'endroit où le 'x' se trouve
                    entreeLargeur.delete(0,END)
                    entreeLargeur.insert(0,Lxl[0])
                    entreeLongueur.delete(0,END)
                    entreeLongueur.insert(0,Lxl[1])
                else:
                    choixSurface.set(0)
                    surface_metres_carres()
                    entreeMetresCarres.delete(0,END)
                    entreeMetresCarres.insert(0,liste[1])
                entreeHauteur.delete(0,END)
                entreeHauteur.insert(0,liste[2])
                entreeCoefficient.delete(0,END)
                entreeCoefficient.insert(0,liste[3])
        calculer_puissance()
        listeBox.select_set(i)

def supprimer_local(event):
    """Méthode qui supprime un local de la liste de locaux."""
    
    i = listeBox.curselection()
    if i:
        for liste in listeLocaux:
            if liste[0] == listeBox.get(i):
                del listeLocauxs[listeLocaux.index(liste)]
        listeBox.delete(0,END)
        for liste in listeLocaux:
            listeBox.insert(END,liste[0])
        
if __name__ == '__main__':
    #--- Fenêtre principale --------------------
    fenetre=Tk()
    fenetre.title("Calcul de puissance d'un local")
    fenetre.resizable(0,0)
    fenetre.geometry("+400+200")    

    #-- Frame de l'interface -------------------
    frameInterface = Frame(fenetre)

    # label et entree nom
    labelNom = Label(frameInterface,text='Nom du local : ')
    labelNom.grid(row=0,column=0)
    nomLocal = StringVar()
    nomLocal.set('sans nom')
    entreeNomLocal = Entry(frameInterface,textvariable=nomLocal)
    entreeNomLocal.grid(row=0,column=1)

    # label surface
    labelTitreSurface = Label(frameInterface,text='Surface')
    labelTitreSurface.grid(row=1,column=0,sticky=W)

    # variable tkinter déterminant le bouton radio sélectionné
    choixSurface = IntVar()
    choixSurface.set(0)

    # bouton radio surface en mêtres carrés
    radioBoutonMcarres = Radiobutton(frameInterface,text='m² :',variable=choixSurface,value=0,command=surface_metres_carres)
    radioBoutonMcarres.grid(row=2,column=0,sticky=W)
    # entree mêtres carrés
    entreeMetresCarres = Entry(frameInterface)
    entreeMetresCarres.insert(0,'0')
    entreeMetresCarres.grid(row=2,column=1)
    # bouton radio surface Largeur x longueur
    radioBoutonLxl = Radiobutton(frameInterface,text='L(m) x l(m)',variable=choixSurface,value=1,command=surface_Lxl)
    radioBoutonLxl.grid(row=3,column=0,sticky=W)
    # label et entree Largeur
    Label(frameInterface,text='Largeur : ').grid(row=4,column=0,sticky=E)
    entreeLargeur = Entry(frameInterface)
    entreeLargeur.insert(0,'0')
    entreeLargeur.config(state=DISABLED)
    entreeLargeur.grid(row=4,column=1)
    # label et entree longueur    
    Label(frameInterface,text='longueur : ').grid(row=5,column=0,sticky=E)
    entreeLongueur = Entry(frameInterface)
    entreeLongueur.insert(0,'0')
    entreeLongueur.config(state=DISABLED)
    entreeLongueur.grid(row=5,column=1)

    # label et entree Hauteur
    labelHauteur = Label(frameInterface,text='Hauteur(m) : ')
    labelHauteur.grid(row=6,column=0,sticky=W)
    entreeHauteur = Entry(frameInterface)
    entreeHauteur.insert(0,'0')
    entreeHauteur.grid(row=6,column=1)

    # label et entree coeeficient
    labelCoefficient = Label(frameInterface,text='Coefficient : ')
    labelCoefficient.grid(row=7,column=0,sticky=W)
    entreeCoefficient = Entry(frameInterface)
    entreeCoefficient.insert(0,'0')
    entreeCoefficient.grid(row=7,column=1)

    # bouton calculer puissance
    b = Button(frameInterface,text='Calculer puissance',command=calculer_puissance)
    b.grid(row=8,column=0,columnspan=2)
    labelPuissance=Label(frameInterface,text='Puissance : ')
    labelPuissance.grid(row=9,column=0,sticky=W,columnspan=2)

    #-- Frame liste ----------------------------
    frameListe = Frame(fenetre)
    # liste box et sa scrollbar
    listeBox = Listbox(frameListe,height=14)
    scrollBar = Scrollbar(frameListe)
    scrollBar.config(command=listeBox.yview)
    listeBox.config(yscrollcommand=scrollBar.set)
    listeBox.pack(side=LEFT,fill=Y)
    listeBox.bind('<ButtonRelease-1>',clic)
    listeBox.bind('<Delete>',supprimer_local)
    scrollBar.pack(side=LEFT,fill=Y)

    #-- Placement des frames -------------------
    frameInterface.pack(side=LEFT)
    frameListe.pack(side=LEFT,fill=Y)

    #--- Chargement du fichier existant --------
    listeLocaux = [] # liste contenant tous les locaux sous la forme [nom,surface,hauteur,coeff] où surface peut être directement en m² ou en Lxl
    try:
        fichier = open('puissanceLocal.txt','r')
        listeLocaux = eval(fichier.read())
        fichier.close()
        for liste in listeLocaux:
            listeBox.insert(END,liste[0])
    except:
        pass

    #--- Lancement de la boucle principale -----
    fenetre.mainloop()



--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjours,

Je tiens à vous remercier pour votre aide, je viens de prendre note des éléments cités et je vais me pencher dessus.
Je vais marquer le sujet comme résolu car avec ces indices sa devrait aller.
Encore merci pour votre aide...

Cdt,

Damien
0
Rejoignez-nous