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 :

[Python 3.6] Tkinter se bloque quand j'insère un nombre élevé de text widget


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [Python 3.6] Tkinter se bloque quand j'insère un nombre élevé de text widget
    J'ai réalisé plusieurs classes afin d'importer des lignes d'un fichiers excel, et les insérer sous forme d'un tableau.
    Pour créer un tableau, j'ai ajouter à ma fenêtre des text widget pour chaque case. Ceci pour que je puisse après modifier chaque cases depuis mon interface. Tout mon code marchait bien quand je passai en paramètre un fichier de lignes d'ordre 1000. Une fois j'ai augmenté le nombre de ligne, ma fenêtre s'est bloqué, et il y a une petit fenêtre qui s'affiche en haut à gauche qui défile toutes les cases qui devrait être dans ma fenêtre principale. Pour illustrer mon problème j'ai créer le petit code suivant qui montre exactement ma situation. Et je joins aussi l'image de mon interface avec la petite fenêtre qui s'affiche.


    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
    import tkinter as tk
     
        fenetre=tk.Tk()
     
        ### This part is for the frame with a scroll bar
        def myfunction(event):
                canvas.configure(scrollregion=canvas.bbox("all"),width=1800,height=500)
        canvas=tk.Canvas(fenetre)
        frame=tk.Frame(canvas)
        myscrollbar=tk.Scrollbar(fenetre,orient="vertical",command=canvas.yview)
        canvas.configure(yscrollcommand=myscrollbar.set)
     
        myscrollbar.pack(side="right",fill="y")
     
        canvas.pack(side="left")
        canvas.create_window((0,0),window=frame,anchor='nw')
        frame.bind("<Configure>",myfunction)
        can = tk.Canvas(frame, width=1000, height=1000)
        can.grid()
        #End of my fram 
     
     
        def click_Button():
            for ligne in range(2000):
                for colonne in range(10):          
                     t=tk.Text(can,width=12, height=3)
                     t.insert('1.0',"salut"+str(ligne+colonne))
                     t.grid(row=ligne, column=colonne+1,sticky='nesw')
            fenetre.update_idletasks()  #Refresh the window after adding text widgets
     
     
        button=tk.Button(can,text="generer",command=click_Button)
        button.grid()
        fenetre.mainloop()
    Nom : Capture.PNG
Affichages : 431
Taille : 119,0 Ko

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Salut,

    Citation Envoyé par elfantroussiO Voir le message
    Tout mon code marchait bien quand je passai en paramètre un fichier de lignes d'ordre 1000. Une fois j'ai augmenté le nombre de ligne, ma fenêtre s'est bloqué
    Votre code crée 10 * 2000 widgets Text... Beaucoup de widgets, beaucoup de mémoire à trouver et je ne vois pas trop côté interaction utilisateur ce qu'il va bien pouvoir faire...

    - W

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Votre code crée 10 * 2000 widgets Text... Beaucoup de widgets, beaucoup de mémoire à trouver et je ne vois pas trop côté interaction utilisateur ce qu'il va bien pouvoir faire...

    - W

    Merci pour votre réponse. En effet, j'importe des données d'un fichier excel en utilisant openpyxl, j'effectue des traitements, et j'affiche le résultats dans le tableau. Mon choix de text widget est afin de pouvoir modifier les cases de mon tableau. Après la modification, j'exporte le tout dans un autre fichier excel. Tout marchait bien avec 400 lignes au début.
    Pensez-vous que 2000 lignes est assez grand pour une mémoire ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Citation Envoyé par elfantroussiO Voir le message
    Tout marchait bien avec 400 lignes au début.
    Pensez-vous que 2000 lignes est assez grand pour une mémoire ?
    Il est facile de voir (en testant un peu) que çà prend des plombes et que si on attend un peu, votre problème se reproduit...

    Plutôt que de créer un widget par case (l'intersection d'une ligne x colonne de votre fichier), il serait plus économe d'utiliser un widget comme ttk.treeview qui ne prend que les données pour les afficher en tableau. Après pour les mises à jour, vous pouvez créer une popup (là ou l'utilisateur "clique") qui va afficher la donnée dans un widget Text ou Entry, accepter la modification, mettre à jour l'item du Treeview,....

    Vous pouvez aussi regrouper vos données en "pages" de n x lignes et n'afficher que la "vue" sélectionnée dans un nombre fixe (et petit) de widgets Text.

    - W

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2018
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il est facile de voir (en testant un peu) que çà prend des plombes et que si on attend un peu, votre problème se reproduit...

    Plutôt que de créer un widget par case (l'intersection d'une ligne x colonne de votre fichier), il serait plus économe d'utiliser un widget comme ttk.treeview qui ne prend que les données pour les afficher en tableau. Après pour les mises à jour, vous pouvez créer une popup (là ou l'utilisateur "clique") qui va afficher la donnée dans un widget Text ou Entry, accepter la modification, mettre à jour l'item du Treeview,....

    Vous pouvez aussi regrouper vos données en "pages" de n x lignes et n'afficher que la "vue" sélectionnée dans un nombre fixe (et petit) de widgets Text.

    - W
    Merci pour votre idée assez précieuse. Après quelque recherche sur votre piste, j'ai trouvé une classe d'un tableau ttk.treeview et qui implémente l'option de modification. http://code.activestate.com/recipes/...icolumn-listb/

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2014, 13h18
  2. Projet ISN Python programme Piano Tkinter
    Par Biloute42 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/05/2014, 18h11
  3. Problème Python 2.7 Tkinter
    Par nicolivier dans le forum Général Python
    Réponses: 4
    Dernier message: 23/03/2013, 19h32
  4. Réponses: 6
    Dernier message: 04/05/2010, 10h18
  5. Réponses: 2
    Dernier message: 23/03/2004, 12h23

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