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 :

Travail sur les listes


Sujet :

Tkinter Python

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Travail sur les listes
    Bonjour tout le monde,

    Voici un petit bout de code que je viens de taper:

    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
    #-*- coding:Utf-8 -*-
     
    from Tkinter import *
     
    def action():
        L1.configure(text = taille)
     
    def ajout():
        liste [taille + 1:] = ['essai2']
     
     
    liste = ['essai0', 'essai1']
    taille = len(liste)
     
    root = Tk()
     
    E1 = Entry(root)
    E1.pack()
     
    L1 = Label(root, text = 'Liste')
    L1.pack()
     
    B1 = Button(root, text = 'Action', command = action)
    B1.pack()
    B2 = Button(root, text = 'Ajout', command = ajout)
    B2.pack()
     
     
    root.mainloop()
    Le but de ce code étant d'ajouter à liste un élément.
    Mais ça ne marche pas.

    En mode interactif si je tape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> liste = ['essai0', 'essai1']
    >>> taille = len(liste)
    >>> liste [taille + 1:] = ['essai2']
    >>> print liste
    Tout fonctionne parfaitement.

    Je me demande donc s'il est possible de modifier une liste depuis une application graphique.
    Si cela n'est pas le cas, alors je vais devoir travailler avec un fichier supplémentaire, mais ça me gêne un peu.

    Quelqu'un a-t-il une idée?
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne sais pas ce que tu veux faire avec ton "liste [taille + 1:] = ['essai2']", mais si tu veux seulement ajouter 'essai2' à la liste:

    Par ailleurs, il faut se rappeler qu'une liste ayant taille=len(liste) membres, ceux-ci sont indexés de 0 à taille-1.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Je ne sais pas ce que tu veux faire avec ton "liste [taille + 1:] = ['essai2']", mais si tu veux seulement ajouter 'essai2' à la liste:

    Par ailleurs, il faut se rappeler qu'une liste ayant taille=len(liste) membres, ceux-ci sont indexés de 0 à taille-1.

    Tyrtamos
    J'ai aussi essayé ceci m'est ça ne fonctionne pas.

    En fait au final je veux permettre à l'utilisateur de compléter la liste en entrant des infos dans l'Entry et les sauvegarder.
    J'ai continué à regarder mais je pense qu'il va falloir que j'utilise un fichier annexe.
    Qu'en penses-tu???
    Moi ça me gêne un peu car je voulais, pour distribuer mon code, un seul et unique fichier.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je t'ai un peu amélioré ton code qui fonctionne:
    - le focus se met au départ sur la ligne de saisie
    - on écrit quelque chose, par exemple: toto
    - on clique sur le bouton 'ajout'
    - on clique sur le bouton 'action' et la liste s'affiche avec 'toto' en plus.
    - si on clique sur le bouton ajout alors que la ligne de saisie est vide, il ne se passe rien.

    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
     
    #-*- coding:Utf-8 -*-
     
    from Tkinter import *
     
    def action():
        global L1
        L1.configure(text = liste)
     
    def ajout():
        global liste,E1
        T = E1.get()
        if T!="":
            liste.append(E1.get())
     
    liste = ['essai0', 'essai1']
     
    root = Tk()
     
    E1 = Entry(root)
    E1.pack()
     
    L1 = Label(root, text = 'Liste')
    L1.pack()
     
    B1 = Button(root, text = 'Action', command = action)
    B1.pack()
     
     
    B2 = Button(root, text = 'Ajout', command = ajout)
    B2.pack()
     
    E1.focus_set()
     
    root.mainloop()
    Si tu veux conserver la liste dans un fichier, tu as plusieurs possibilités, y compris que ça se fasse tout seul (voir "données persistantes" dans le manuel).

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Ok. Donc à priori je ne peux pas directement sauvegarder la modification dans mon code source.

    Je vais donc passer, je pense, avec un fichier supplémentaire.

    Si tu veux conserver la liste dans un fichier, tu as plusieurs possibilités, y compris que ça se fasse tout seul (voir "données persistantes" dans le manuel).
    De quel manuel parles-tu?
    J'ai regardé dans la doc avec Python et dans le tuto de G. SWINNEN, je n'est rien trouvé. En tout cas pas avec ce nom.

    Sinon, je pense que je vais utiliser une BDD ou un autre fichier quelconque.
    Je vais voir en fonction de mon humeur de cette nuit.

    Là je vais retourner au taff et je verrai ça ce soir.
    En tout cas encore merci.

    Et un problème de plus de résolu avec l'aide de "super tyrtamos"

    Bye
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Pour la persistance des données, regarde du côté des modules: anydbm, pickle et shelve. Mais je ne sais pas (encore) m'en servir...

    Pour la doc de référence: chapitre 13 "Data Persistence" de: http://docs.python.org/lib/lib.html

    Petites infos en français:
    http://fr.wikipedia.org/wiki/Persistance_(informatique)
    http://quentel.pierre.free.fr/python...le-shelve.html
    http://ferry.eof.eu.org/lesjournaux/...ml/x11651.html
    etc...

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Tu m'as sorti de pas mal de problèmes et très souvent tes solutions m'ont impressionné, mais alors là tyrtamos chapeau....

    J'ai réalisé ce petit bout de code pour faire un essai:

    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
    #-*- coding:Utf-8 -*-
     
    from Tkinter import *
    import shelve
     
    def lecture():
        cle = E1.get()
        d = shelve.open('fichierdbm')
     
        renvoi = d[cle] # renvoi la donnée stockée à la clé    
        L3.configure(text = renvoi)
     
        d.close()
     
    def ajout():
        cle = E1.get()
        donnee = E2.get()
        d = shelve.open('fichierdbm')# ouvre, avec un nom de fichier type nomdufichierdbm -- pas d'extension
     
        d[cle] = donnee # stocke la donnée à la clé (écrase les anciennes données
                    # si la clé existait déjà)
        d.close()
     
    ##############################    
    root = Tk()
     
    L1 = Label(root, text = 'Clé')
    L1.pack()
    E1 = Entry(root)
    E1.pack()
    L2 = Label(root, text = 'Donnée')
    L2.pack()
    E2 = Entry(root)
    E2.pack()
     
    L3 = Label(root, text = 'aaaa')
    L3.pack()
     
    B1 = Button(root, text = 'Lecture', command = lecture)
    B1.pack()
    B2 = Button(root, text = 'Ajout', command = ajout)
    B2.pack()
     
    E1.focus_set()
     
    root.mainloop()
    Comme on dit chez moi ça déchire.

    Pour le moment le seul problème que je vois c'est l'écrasement systématique des données existantes par la méthode donnee = d[cle].
    Il faut alors passer par indic = d.has_key(cle) qui renvoie true si la clé existe.

    Mais bon je vais pouvoir gérer ça.

    Si pour le code sur lequel je travaille actuellement cela me gêne d'utiliser d'autres fichiers, une chose est sûre c'est que pour les futurs ça va considérablement m'aider.

    Pour finir je tiens à dire que je ne regrette vraiment pas d'être passé à Python. C'est vraiment le pied...

    Encore merci pour ton aide.

    Je mets ce post en résolu, mais si tu souhaites je pourrai te faire parvenir par mp mon avancement sur ce module et les autres.

    Bye et encore merci.

    Jiyuu.

    PS: Concernant Bwidget sur Linux, j'ai pu avancé avec Python2.4 au lieu de 2.5, mais je n'ai pas encore réussi à l'installer.
    Je pense que je regarderai ça demain ou après demain.

    Tchao
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Coq] Travail sur les listes
    Par HeatBurns dans le forum Langages fonctionnels
    Réponses: 1
    Dernier message: 19/01/2014, 21h12
  2. [MFC][Visual C++ 6]Travail sur les dates
    Par tus01 dans le forum MFC
    Réponses: 6
    Dernier message: 31/01/2006, 21h32
  3. GDI - Travail sur les pixels dans un DIB
    Par jiib dans le forum Windows
    Réponses: 3
    Dernier message: 12/12/2005, 13h17

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