Aide tkinter

Résolu
Signaler
Messages postés
3
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 février 2009
-
Messages postés
3
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 février 2009
-
                              Bonjour,
Je debute en programmation avec python depuis quelques jours.J'essaie de creer un petit programme simple pour controler l'efficacité d'une climatisation automobile.Mon programme debute par une fonction input pour que l'utisateur entre des données et ceci foncionne parfaitement.Mon souci est que je souhaite remplacer ma fonction input par une interface grahique avec Tkinter mais j'ai passé beaucoup d'heures et je n'arrive à rien,allors je me résous à demander de l'aide.Voici le debut de mon code,soyez indulgent car je suis vraiment un novice.Merci pour votre aide.
t1=input('entrer la temperature d_air exterieure')
h1=input('entrer l_hygrometrie')
t2=input('entrer la temperatur d_air souffle')

if(t1>=15)and(t1<20):
    if(h1>0)and(h1<70):
        if(t2<7):
            import grclim1.py
        else:
            import grclim2.py
   
    if(h1>=70)and(h1<100):
        if(t2<9):
            print('efficacite clim correcte')
        else:
            print('manque d efficacite de la climatisation')
           

4 réponses

Messages postés
104
Date d'inscription
lundi 9 octobre 2006
Statut
Membre
Dernière intervention
13 décembre 2020
71
Bonsoir

1) Attention a la portée des variables

def diag():
    print "objets TkInter",t1,h1,t2   
    if t1>15 and t1<20:
        if h1>20 and h1<70:
            if t2<6:
                print "clim correcte"
            else:
                print"manque d_efficacite"
               
Dans l'exemple cité, les variables t1, h1 et t2 ne sont pas des variables de la fonction "diag" ce sont les numéros d'objets Tkinter attribués aux champs Entry
Conclusion: "il ne se passe rien..."

Pour des utilisations différentes il faut des variables différentes.
    t1=IntVar()
    t1=Entry(fen1,textvariable=tempext)
    if t1>15
   
2) IntVar() et textvariable ne sont pas utiles dans ce cas

3) Ci-joint une proposition pour utiliser les champs Entry

#!/usr/bin/python
# -*- coding: ISO-8859-15 -*-

from Tkinter import*
import tkMessageBox

def diag():
    #La fonction "diag" sera appellée par appui du bouton "valider":
    #c'est ici qu'il faut lire le contenu des champs en entrée avec la méthode
    #associée à l'objet ".get()" et qu'il faut effectuer tous les contrôles de
    #saisie

    #Controle de la saisie
    t1_ent = t1.get()
    if not control_champ(t1_ent): return

    h1_ent = h1.get()
    if not control_champ(h1_ent): return

    t2_ent = t2.get()
    if not control_champ(t2_ent): return

    #int fonction pour transformer en "integer" la valeur du champ de saisie qui
    #est par défaut en "str", pour permettre la comparaison numérique

    print "type t1_ent",type(t1_ent)
    t1_ent = int(t1_ent)
    print "type t1_ent",type(t1_ent)
    h1_ent = int(h1_ent)
    t2_ent = int(t2_ent)

    if t1_ent > 15 and t1_ent < 20:
        if h1_ent>20 and h1_ent<70:
            if t2_ent<6:
                print "clim correcte"
            else:
                print"manque d'efficacité"
            return

    #Si les conditions ne sont pas remplies, il ne se passe rien, il faut le dire
    #un message c'est mieux qu'un print.
    tkMessageBox.showwarning("Climatisation ", "Saisie hors controle")

def control_champ(champ):

    #Champ vide?
    if champ == "":
        tkMessageBox.showwarning("Climatisation ", "Veuillez entrer les données")
        return False

    #Champ numérique?
    for x in map(ord, champ):
        if x < 48 or x > 57: # Valeurs ASCII pour les chiffres
            tkMessageBox.showwarning("Climatisation ", "Saisie non numérique")
            return False

    return True

fen1=Tk()
tempext=Label(fen1,text='temperature exterieure')
hygro=Label(fen1,text='hygrometrie')
tempint=Label(fen1,text='temperature interieure')

t1=Entry(fen1)
h1=Entry(fen1)
t2=Entry(fen1)

validation=Button(fen1,text='valider',command=diag)

tempext.grid(row=0)
hygro.grid(row=1)
tempint.grid(row=2)

t1.grid(row=0,column=1)
h1.grid(row=1,column=1)
t2.grid(row=2,column=1)

validation.grid(row=4,column=1)

fen1.mainloop()

Bonne continuation
Messages postés
104
Date d'inscription
lundi 9 octobre 2006
Statut
Membre
Dernière intervention
13 décembre 2020
71
Bonjour,

Il faut commencer par le début et je conseille une saine lecture içi
Ce document est libre et peut être téléchargé (370 pages en français).
Pour Tkinter voir le chapitre 8

Bon courage
Messages postés
3
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 février 2009

                                Bonjour,
Sur vos precieux conseils,j'ai telechargé le document et je l'ai etudié.Malgré de notables progrés je coince un peu.Mon interface grahique est conforme à ce que je voulais, mais lorsque je clique sur le bouton 'valider' je n'obtiens aucun resulat,il y a surement beaucoup de choses que je ne comprends pas.voici une parteie de mon code simplifié,j'espére que vous pourrez m'orienter un peu.merci d'avance

#!/usr/bin/python

from Tkinter import*

fen1=Tk()

def diag():
    if t1>15 and t1<20:
        if h1>20 and h1<70:
            if t2<6:
                print "clim correcte"
            else:
                print"manque d_efficacite"
                                   

tempext=Label(fen1,text='temperature exterieure')
hygro=Label(fen1,text='hygrometrie')
tempint=Label(fen1,text='temperature interieure')
t1=IntVar()
h1=IntVar()
t2=IntVar()

t1=Entry(fen1,textvariable=tempext)
t1.get()
h1=Entry(fen1,textvariable=hygro)
h1.get()
t2=Entry(fen1,textvariable=tempint)
t2.get()
  
validation=Button(fen1,text='valider',command=diag)

tempext.grid(row=0)
hygro.grid(row=1)
tempint.grid(row=2)

t1.grid(row=0,column=1)
h1.grid(row=1,column=1)
t2.grid(row=2,column=1)

validation.grid(row=4,column=1)

fen1.mainloop()                 
Messages postés
3
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
21 février 2009

                                 Bonjour,
Je vous remercie pour tous vos conseils,car maintenant tout est devenu trés clair pour moi,j'ai bien comris toutes mes erreurs alors que je ramais depuis un moment.J'ai revu l'ensemble de mon code et tout fonctionne parfaitement.
Encore merci et bon week end.