IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

(Débutant) Récupérer des valeurs en fonction du choix dans combobox


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut (Débutant) Récupérer des valeurs en fonction du choix dans combobox
    Bonjour,

    Description du code :
    Dans un premier temps j'ai juste créer les entrées et l'utilisateur doit entrer une à une toute les valeurs.
    Ensuite j'ai rajouté la combobox mais elle n'a pas d'utilité pour l'instant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    # Calcul du taux de travail en traction
    # -*- coding: ISO-8859-1 -*-
     
    from Tkinter import *
    import Pmw
     
    # liste pour combobox
     
    classemecanique = ('C18','C22','C24','GL24h','GL32h')
     
    # création de la fenetre
     
    fen1=Pmw.initialise()
    fen1.title("Vérification du taux de travail en compression")
     
    # création de widgets 'Label' et 'Entry' :
    tex01 = Label(fen1, text='Vérification du taux de travail en compression.')
    tex02 = Label(fen1, text='Définition de l élément étudié')
    txt1 = Label(fen1, text = 'Base, b en mm :')
    txt2 = Label(fen1, text = 'Hauteur, h en mm :')
    txt3 = Label(fen1, text = 'ft,0,k en MPa :')
    txt4 = Label(fen1, text = 'Gm :')
    txt5 = Label(fen1, text = 'kh :')
    tex03 = Label(fen1, text='Définition de l effort')
    txt6 = Label(fen1, text = 'N en N :')
    txt7 = Label(fen1, text = 'kmod :')
    entr1 = Entry(fen1)
    entr2 = Entry(fen1)
    entr3 = Entry(fen1)
    entr4 = Entry(fen1)
    entr5 = Entry(fen1)
    entr6 = Entry(fen1)
    entr7 = Entry(fen1)
     
    # Mise en place de combobox :
    combo = Pmw.ComboBox(fen1, labelpos = NW,
                         label_text = 'Choisissez la classe mécanique :',
                         scrolledlist_items = classemecanique,
                         listheight = 150)
    combo.grid(row =13, columnspan =2, padx =10, pady =10)
     
     
     
     
    # Mise en page à l'aide de la méthode 'grid' :
    tex01.grid(row =1, sticky =W)
    tex02.grid(row =2, sticky =W)
    tex03.grid(row =8, sticky =W)
    txt1.grid(row =3, sticky =E)
    txt2.grid(row =4, sticky =E)
    txt3.grid(row =5, sticky =E)
    txt4.grid(row =6, sticky =E)
    txt5.grid(row =7, sticky =E)
    txt6.grid(row =9, sticky =E)
    txt7.grid(row =10, sticky =E)
    entr1.grid(row =3, column =2)
    entr2.grid(row =4, column =2)
    entr3.grid(row =5, column =2)
    entr4.grid(row =6, column =2)
    entr5.grid(row =7, column =2)
    entr6.grid(row =9, column =2)
    entr7.grid(row =10, column =2)
     
     
    # démarrage :
    fen1.mainloop()
    J'ai par ailleurs créé un fichier xml du genre :
    A vrai dire je ne connais pas grand chose de la syntaxe que doit avoir un fichier xml...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" ?>
    <element_racine>
    		<profil id="C18" mat="BM" essence="résineux" fmk="18" ftok="11" ft90k="0,5" fc0k="18" fc90k="2,2" fvk="2" E0m="9" E0k="6" E90m="0,3" Gm="0,56" Gk="0,38" pk="320" pm="380" gM="1,3"/>
    		<profil id="C22" mat="BM" essence="résineux" fmk="22" ftok="13" ft90k="0,5" fc0k="20" fc90k="2,4" fvk="2,4" E0m="10" E0k="6,7" E90m="0,33" Gm="0,63" Gk="0,42" pk="340" pm="410" gM="1,3"/>
    		<profil id="C24" mat="BM" essence="résineux" fmk="24" ftok="14" ft90k="0,5" fc0k="21" fc90k="2,5" fvk="2,5" E0m="11" E0k="7,4" E90m="0,37" Gm="0,69" Gk="0,46" pk="350" pm="420" gM="1,3"/>
    </element_racine>
    Je souhaite que certaines entrées soit remplies automatiquement en fonction du choix fait dans la combobox.
    On m'a parlé des bibliothèque minidom et elementtree mais je ne sais pas comment les mettre en application.
    J'imagine que ce n'est pas extraordinaire à réaliser mais je ne trouve pas de piste sur le net pour me renseigner. Est ce que vous auriez des indices ou un bout de code pour m'aider?

    Amicalement
    Jo

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut chaque chose en son temps
    Bonjour,
    je me rend compte que j'en demande beaucoup trop d'un coup dans mon premier post.

    Alors j'ai découpé ça par étape et la première étape que je vois c'est de créer une liste pour la combobox.

    Cette liste doit être composé des valeurs de chaque attribut "id" dans le fichier .xml.
    Arrêter moi si je me trompe.
    Cela doit donné :
    classemecanique = ('C18','C22'...,'GL32h')

    Je sais comment affiché la valeur de "id" pour une ligne donnée ; ici ligne 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from xml.dom import minidom
    xmldoc = minidom.parse('materiau.xml')
    reflist = xmldoc.getElementsByTagName('profil')
    ligne = reflist[0]
    ligne.attributes["id"]
    a = ligne.attributes["id"]
    print a.value
    ou pour une ligne choisi préalablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def materiau2(n) :
        ligne = reflist[n]
        ligne.attributes["id"]
        a = ligne.attributes["id"]
        a.value
        print a.value
    Ensuite j'ai trouvé commet afficher les uns à la suite des autres chaque valeur de "id" dans le document.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def materiau() :
        n=0
        while n<26 :
            ligne = reflist[n]
            ligne.attributes["id"]
            a = ligne.attributes["id"]
            n=n+1
            print a.value
    Maintenant ce que je n'arrive pas à faire c'est inséré cette valeur dans une liste :
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    materiauliste = (materiau2(1),materiau2(1)
    seulement voila le résultat...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> 
    C14
    C16
    C18
    C20
    (None, None, None, None)
    >>>
    C'est quoi cette liste avec "None" ?
    Comment pourrais je avoir une liste des valeurs des "id" ?
    La valeur de "id" est de type 'Unicode', est ce une piste ?

    Amicalement
    Jo

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,
    J'ai pas eu beaucoup de réponses. Mais j'ai du mal m'y prendre et j'espère que je ferai mieux la prochaine fois.
    Je poste quand même le code que j'ai fait pour arriver à mes fins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    # fonction de récupération de la valeur de "m" dans la liste n
    # RAPPEL : 0<n<25 ; m = id mat essence fmk ftok ft90k fc0k fc90k
    #fvk E0m E0k E90m Gm Gk pk pm gM
    def materiau01(n,m) :
        xmldoc = minidom.parse('materiau.xml')
        reflist = xmldoc.getElementsByTagName('profil')
        ligne = reflist[n]
        ligne.attributes[m]
        a = ligne.attributes[m]
        id = a.value
        id2 = id.encode('utf-8')
        return id2
     
    #trouve l'indice de car dans ch
    def trouve(ch,car,deb=0):
        i=deb
        while i< len(ch):
            if ch[i]==car:
                return i
            i=i+1
        return -1
     
     
    # création list classe mécanique bois
    def list01():
        n=0
        m= "id"
        idn = (materiau01(n,m),)
        while n<25 :
            n = n+1
            idn = idn + (materiau01(n,m),)
        return idn
    Ainsi je peux récupérer la liste que j'attribuerais à la ComboBox avec la fonction liste01().
    C'est un peu le bazar, non?

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/07/2013, 17h32
  2. Réponses: 1
    Dernier message: 29/06/2013, 19h17
  3. Réponses: 2
    Dernier message: 22/02/2012, 01h03
  4. [XL-2003] récupérer des valeurs en fonction de caractères
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/09/2009, 09h31
  5. Réponses: 1
    Dernier message: 20/03/2007, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo