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 :

importation d'une liste et mise a jour des labels et entry


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut importation d'une liste et mise a jour des labels et entry
    Bonjour,

    Mon Objectif : Importer une liste d'article contenu dans un fichier texte puis rafraîchir les entry et les labels en fonction de la liste (colonne de droite).

    - >Executer le fichier grid.py

    1 : choissisez entre creer un fichier excel ou selectionner un fichier excel
    2: option -> import -> selectionner un fichier .txt

    et normalement la colonne de droite se met a jour.

    1 probleme : si je reitere l'operation la "nouvelle liste" va s'ajouter dans la colonne au lieu de rafraichir.
    2 probleme : Lorsque je remplis les entry et que je valide mes donnees, je lance la fonction savetoexcel.

    Cette fonction permet d'ajouter les donnees saisies au fur et a mesure dans un fichier excel.
    Mais lorsque j'importe une liste d'articles et que je saisie des informations voici ce le bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
        return self.func(*args)
      File "grid.py", line 195, in <lambda>
        command =lambda: SavetoExcel(filepath, feuille, List_categories, List_categories_entry, Dico_head, Info))
      File "/home/alexandre/Documents/python/fonctionland.py", line 37, in SavetoExcel
        if(entry.get()!=''):
      File "/usr/lib/python3.8/tkinter/__init__.py", line 3038, in get
        return self.tk.call(self._w, 'get')
    _tkinter.TclError: invalid command name ".!labelframe6.!entry"
    1 : Je ne comprends pas pourquoi mes entry et labels de mes articles ne sont pas update

    Est-ce un problème de portée des variables ?
    doit-je utilise le .set()
    Je vous en remercie
    Suntory
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Le message d'erreur dit juste que le widget ".!labelframe6.!entry" n'est plus accessible.
    Probablement parce que vous l'avez détruit dans mettre à jour votre liste: l'objet Entry est encore là même après un .destroy.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut
    Ah d'accord je comprends.
    Les entry ne sont pas destroy mais lorsque je renouvelle mes entry elles vont s'ajouter aux anciennes

    Ma nouvelle liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['Bols', 'Bols Ramen', 'Assiettes', 'Assiettes Sushi', 'Plats']
    Mes anciens labels (11 label car par defaut j'ai 11 articles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .!labelframe6.!label
    .!labelframe6.!label2
    .!labelframe6.!label3
    .!labelframe6.!label4
    .!labelframe6.!label5
    .!labelframe6.!label6
    .!labelframe6.!label7
    .!labelframe6.!label8
    .!labelframe6.!label9
    .!labelframe6.!label10
    .!labelframe6.!label11
    et la les entry de ma nouvelle lise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Bols
    .!labelframe6.!entry12
    Bols Ramen
    .!labelframe6.!entry13
    Assiettes
    .!labelframe6.!entry14
    Assiettes Sushi
    .!labelframe6.!entry15
    Plats
    .!labelframe6.!entry16
    J'ai aussi compris que dans ma fonction savetoexcel je demande entry.get() alors que je l'ai destroy()...
    J'ai donc fait ceci :

    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
    def SavetoExcel(Filepath, sheet, Listing, Listing_entry, Dico_header, info_entry):
    
       no_empty=[]
       temp=[]
       for i, entry in enumerate(Listing_entry[-len(Listing):]):
          if(entry.get()!=''):
             no_empty.append(entry.get())
             temp.append(Listing[i])
             entry.delete(0, END)
       Dico_header["Categories"] = temp
       Dico_header["Descriptions"] = no_empty
       #print(temp)
       #print(no_empty)
    
       taille = len(temp)
       key = list(Dico_header.keys())
       for i, entry in enumerate(info_entry):
          temp2 = [''] * taille
          temp2[0] = entry.get()
          Dico_header[key[i]] = temp2
          try:
             entry.delete(0,END)
          except AttributeError:
             pass
    
       df = pd.DataFrame.from_dict(Dico_header, orient='index')
       df = df.transpose()
       print(sheet.get())
       #print(Filepath.get())
       #print(df)
       append_df_to_excel(Filepath.get(),df,sheet_name = sheet.get(),header=False,index=False
    )

    mais j'obtiens toujours l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
        return self.func(*args)
      File "grid.py", line 195, in <lambda>
        command =lambda: SavetoExcel(filepath, feuille, List_categories, List_categories_entry, Dico_head, Info))
      File "/home/alexandre/Documents/python/fonctionland.py", line 37, in SavetoExcel
        if(entry.get()!=''):
      File "/usr/lib/python3.8/tkinter/__init__.py", line 3038, in get
        return self.tk.call(self._w, 'get')
    _tkinter.TclError: invalid command name ".!labelframe6.!entry"
    Alors que je demande cette fois entry.get() des nouveaux entry issue de ma nouvelle liste importe

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Normalement le nom ".!labelframe6.!entry" est unique i.e. c'est le 6ème Labelframe créé et la première Entry créée avec pour parent ce Labelframe.
    Par ailleurs, ce nom là n'est pas dans ceux mentionnés dans "les entry de ma nouvelle lise".

    A vous de savoir ce que cet Entry fout là...

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

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Je suis désolé mais je ne comprends absolument pas pourquoi est-ce qu'on a un code aussi compliqué (en trois fichiers) pour un truc qui à l'air aussi simple sur le papier... Vous pouvez balancer le fichier pour voir à quoi ça ressemble please ?

Discussions similaires

  1. liste déroulante mise a jour
    Par D.Mounir dans le forum Excel
    Réponses: 17
    Dernier message: 18/06/2007, 12h34
  2. passage d'une page a une autre et la mise a jour des variables
    Par King_T dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/03/2007, 15h19
  3. recuperer valeur liste deroulante + mise a jour champs input
    Par dj_kyl dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 19h42
  4. probleme avec des calculs et une requete de mise a jour
    Par el_quincho dans le forum Access
    Réponses: 2
    Dernier message: 16/03/2006, 11h06
  5. Réponses: 5
    Dernier message: 25/11/2005, 13h42

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