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

Python Discussion :

Probleme d'actualisation d'une combobox


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut Probleme d'actualisation d'une combobox
    Bonjour à tous,

    Je travail à temps perdu sur un petit programme tout simple qui me permet de sauver du temps quand j'enregistre mes numéros de confirmation de paiement de facture à ma banque.

    En gros, j'ouvre le programme, je choisi un fournisseur dans une liste, puis le montant en argent, puis le numéro de confirmation donné par ma banque et enfin je met des commentaires s'il y a lieu.

    J'ai la possibilité de modifier la liste de fournisseur en cliquant sur le bouton ajout (elle est enregistré dans un fichier txt). Or, lorsque je modifie cette liste, je suis obligé de fermer mon programme puis de le ré-ouvrir sinon elle ne s'actualise pas, ce qui fait pas beau comme programme

    Si quelqu'un a une idée pour régler ça, j'ai essayé plein de truc différent mais sa marche pas.

    Je vous met mon code (débutant ):

    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
    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
     
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
     
    #############################################################################
    # Gestionnaire de transaction                                               #
    # Créé par: Pascal St-louis                                                 #
    # En date du: 2014-01-14                                                    #
    #---------------------------------------------------------------------------#
    # Module :                                                                  #
    #           tkinter                                                         #
    #           os                                                              #
    #           time                                                            #
    #############################################################################
     
    #---Importation des modules
    try:
        from tkinter import *
        from tkinter.ttk import *
        import os, time
    except ImportError as error:
        print("Impossible de charger le module: ", error)
        print("Sortie forcé du systeme")
        try:
            os._exit(0)
        except:
            print("Systeme bloqué, quitter manuellement")
     
    #---Variable
    titre = "GesTransac"
    screenX = 200
    screenY = 300
    nomfichier1 = "relever.txt"
    nomfichier2 = "fournisseur.txt"
     
    #---Fonction
    def listCombo(choix, liste):
        """Génère une liste déroulante"""
        box = Combobox(textvariable = choix, values = liste, state = "readonly")
     
        return box
     
    def valider():
        """Format les chaines de caractère dans les bon standars puis sauvegarde
    dans une fichier"""
        date = time.strftime("%Y-%m-%d") #date du jour
     
        chaine1 = saisie.get() #formatage du nombre monaitère
        if chaine1[-1] != "$":
            chaine1 = chaine1 + "$"
        ok = False
        for signe in chaine1:
            if signe == ".":
                ok = True
        if ok == False:
            chaineB = chaine1[:-1]
            chaine1 = chaineB + ".00$"       
     
        chaine3 = saisie3.get(1.0, END) #Formatage du champs de commantère
        chaine3 = chaine3.strip()
        chaine3 = chaine3.lower()
        chaine3 = chaine3.capitalize()
     
        texte = date + " " + select.get() + " " + chaine1 + " " + saisie2.get() + " " + chaine3 + "\n"
     
        with open(nomfichier1, "a") as fichier:
            fichier.write(texte)
     
    def erase():
        """Efface un contenu"""
        saisie.delete(0, END)
        saisie2.delete(0, END)
        saisie3.delete(1.0, END)
     
    def consulter(fichier):
        """Ouvre un programme"""
        os.system(fichier)
     
    def lirefichier():
        """Lit un fichier et retourne son contenu"""
        with open(nomfichier2, "r") as fichier:
            contenu = fichier.read()
     
        return contenu
     
    #---fenetre principal
    fen1 = Tk()
    fen1.title(titre)
    #centrage et dimensionnement de la fenetre
    fen1.geometry("%dx%d+%d+%d" % (screenX, screenY, fen1.winfo_screenwidth()/2 -
                                   (screenX/2), fen1.winfo_screenheight()/2 - (
                                       screenY/2)))
     
    #Placement des items dans la fenêtre
    Label(fen1, text="Fournisseur").place(x=0, y=0)
     
    select = StringVar()
    listCombo(select, lirefichier()).place(x=0, y=20)
    Button(fen1, text="ajout", width=5, command=lambda: consulter(nomfichier2)).place(x=145, y=17)
     
    Label(fen1, text="Montant").place(x=0, y=50)
     
    saisie = Entry(fen1, width=23)
    saisie.place(x=0, y=70)
     
    Label(fen1, text="# de confimation").place(x=0, y=100)
     
    saisie2 = Entry(fen1, width=23)
    saisie2.place(x=0, y=120)
     
    Label(fen1, text="Commentaire").place(x=0, y=150)
     
    saisie3 = Text(fen1, width=18, height=6)
    saisie3.place(x=0, y=170)
     
    Button(fen1, text="Valider", width=7, command=valider).place(x=0, y=270)
    Button(fen1, text="Effacer", width=7, command=erase).place(x=52, y=270)
    Button(fen1, text="Quitter", width=7, command=fen1.destroy).place(x=104, y=270)
    Button(fen1, text="Voir", width=5, command=lambda: consulter(nomfichier1)).place(x=156, y=270)
     
    fen1.mainloop()
     
    #---Sortie du systeme
    print("Sortie du systeme")
    fen1.quit()
    os._exit(0)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Quand vous écrivez:
    J'ai la possibilité de modifier la liste de fournisseur en cliquant sur le bouton ajout (elle est enregistré dans un fichier txt).
    Ce que vous appelez "liste de fournisseur" se réduit au contenu du fichier.
    Or, lorsque je modifie cette liste, je suis obligé de fermer mon programme puis de le ré-ouvrir sinon elle ne s'actualise pas, ce qui fait pas beau comme programme
    Tant que le "je modifie cette liste" n'est qu'ajout de lignes au fichier, impossible d'actualiser la "présentation" cote Combo autrement qu'en relisant le fichier.

    C'est crade mais pourquoi pas... encore faut-il faire "l'actualisation"!
    Jouez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import tkinter as tk
    >>> import ttk
    >>> app = tk.Tk()
    >>> select = tk.StringVar()
    >>> combo = ttk.Combobox(textvariable=select, values='a\nb\nc\n')
    >>> combo.pack()
    Ca résume ce que fait votre code sans s'em... a aller lire 'a\nb\nc\n' dans un fichier.

    Changer, c'est par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> combo['values']='1\n2\n'
    Il ne vous reste qu'a emballer cela dans une fonction appelée après l'ajout d'un fournisseur dans le fichier.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Je ne suis pas sur de comprendre???

    Dans le fond, tu me dit de modifier a la main la valeur de "value" de la combobox? Sa ne me dérangerais pas si je serais le seul a me servir du programme, mais la il n'y a pas que moi...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par PascalStl Voir le message
    Dans le fond, tu me dit de modifier a la main la valeur de "value" de la combobox? Sa ne me dérangerais pas si je serais le seul a me servir du programme, mais la il n'y a pas que moi...
    A la main? Non, via une fonction qui compose les opérations mentionnées et ce pour ne pas trop changer la "structure" vu que liste des fournisseur n’est actuellement qu'une suite d'octets. Et j'ai mentionne que c’était "crade", mais "assez bon" pour vous permettre d'avancer.

    Si votre propos est d'avoir une liste de fournisseurs partagée entre plusieurs utilisateurs, il faudrait passer par une base de donnée.
    Chose que vous saurez un jour tout seul en vous donnant le temps d'apprendre a programmer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Aaa, ok, dans le fond tu veux dire que je prend les informations du fichier, je les stocks dans une variable, et lorsque l'utilisateur rajoute un fournisseur, je stock l'information dans la variable, puis lorsqu'il quitte le programme, je réenregistre la nouvelle info dans le fichier. Est-ce que j'ai bien compris?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par PascalStl Voir le message
    Est-ce que j'ai bien compris?
    La musique me plaît, pour les paroles, vous verrez bien en codant.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2010, 07h31
  2. probleme actualisation d'une combobox générée par macro.
    Par elombre dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/06/2009, 12h38
  3. Code d'actualisation d'une combobox
    Par benoit13 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/07/2008, 16h30
  4. actualisation d'une combobox
    Par norkoffire dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/06/2007, 10h54
  5. [MFC] Probleme d'actualisation d'une listbox
    Par Robleplongeur dans le forum MFC
    Réponses: 5
    Dernier message: 13/05/2004, 14h15

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