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 :

Creer une classe pour utiliser des Treeview Tkinter customisés [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut Creer une classe pour utiliser des Treeview Tkinter customisés
    Bonjour,
    Afin de pouvoir réutiliser les mêmes réglages pour des tableaux Treeview, j ai voulu créer une classe tableau pour l'utiliser ensuite avec 3 tableaux dans une même Frame en utilisant un grid() mais malheureusement cela ne marche pas. Pouvez vous m'aider et m'expliquer pourquoi ça ne marche pas?
    En vous remerciant d'avance.
    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
     
    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
     
     
    montitre1=['Analyte','unité' ,'Contrôle', 'LA', 'Résultat', 'Cible' ,'Biais%' ,'CV%' ,'Note', 'z-score', 'Cible', 'Biais%' ,'CV%' ,'Note' ,'z-score']
    montitre2=['c1','c2','c3']
    montitre3=['choix1','choix2']
     
    class montableau(ttk.Frame):
        def __init__(self,root,mestitres):
            super().__init__(root,mestitres)
            self.titre=mestitres
            self.parent=root
            self.tableau1 = ttk.Treeview(self.parent, columns=tuple(self.titre), show='headings', selectmode='extended',
                                     takefocus=True)
            self.tableau1['show'] = 'headings'
            for i in range(len(mestitres)):
                self.tableau1.heading(i, text=mestitres[i])
                if (i == 0):
                    self.tableau1.column(i, minwidth=0, width=120, stretch=NO)
                else:
                    self.tableau1.column(i, minwidth=0, width=80, stretch=NO)
     
    root = Tk()
    root.geometry("1250x700")
    root_frame = Frame(root)
    root_frame.pack()
     
    tab1=montableau(root_frame,montitre1)
    tab2=montableau(root_frame,montitre2)
    tab3=montableau(root_frame,montitre3)
     
    tab1.grid(row=0, column=0)
    tab2.grid(row=0, column=3)
    tab3.grid(row=5, column=2)
     
    root.mainloop()
    Voici mon message d'erreur:
    "
    Traceback (most recent call last):
    File "C:\Python241121\T14_canny\T14_canny\essaifenetre1.py", line 30, in <module>
    tab1=montableau(root_frame,montitre1)
    File "C:\Python241121\T14_canny\T14_canny\essaifenetre1.py", line 12, in __init__
    super().__init__(root,mestitres)
    TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
    "
    et donc je ne vois pas ou est le problème :
    - j'indique bien le paramétrage du root et l'utilisation d'une liste() mais peut être que je ne peux pas utiliser une classe sans affichage dans celle ci . Mes compétences en python étant très limitées j'aurai souhaité vos avis aussi bien sur les erreurs que sur l'utilisation d'une classe pour fabriquer un widget customisé!"
    Merci pour vos réponses.

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

    Citation Envoyé par johanndebutant Voir le message
    mais malheureusement cela ne marche pas. Pouvez vous m'aider et m'expliquer pourquoi ça ne marche pas?
    Quand ça ne marche pas, Python indique (en général) ce qui ne va pas.
    A partir de là, on relit son code pour comprendre ce qui ne va pas et on essaie de corriger.

    Après on peut être "perdu" et demander de l'aide... sans oublier de poster le message d'erreur.

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

  3. #3
    Membre du Club
    Homme Profil pro
    Medecin Biologiste
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Medecin Biologiste
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 49
    Points
    49
    Par défaut
    Après quelques soirées à ramer et à consulter la biblio j'ai enfin trouvé. Je poste la solution pour ceux que ça pourrait aider.
    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
     
    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
     
     
    montitre1 = ['Analyte', 'unité', 'Contrôle', 'LA', 'Résultat', 'Cible', 'Biais%', 'CV%', 'Note', 'z-score',
                         'Cible', 'Biais%', 'CV%', 'Note', 'z-score']
    montitre2 = ['c1', 'c2', 'c3']
    montitre3 = ['choix1', 'choix2']
     
    class montableau(ttk.Frame):
        def __init__(self,master,items=[]):
            super().__init__(master)
            self.titre=items
            self.tableau1 = ttk.Treeview(self,columns=tuple(items))
            self.tableau1['show'] = 'headings'
            for i in range(len(items)):
                self.tableau1.heading(i, text=items[i])
                if (i == 0):
                    self.tableau1.column(i, minwidth=0, width=120, stretch=NO)
                else:
                    self.tableau1.column(i, minwidth=0, width=80, stretch=NO)
            self.tableau1.pack(side=tk.LEFT)
     
     
        def insert_item(self, listelecture):
            for row in (listelecture):
                self.tableau1.insert('', tk.END, values=row)
     
     
     
    class App(tk.Tk):
        def __init__(self):
            super().__init__()
            self.frame_a = montableau(self, montitre1)
            self.frame_b = montableau(self, montitre2)
            self.frame_a.pack(side=tk.TOP, padx=10, pady=10)
            self.frame_b.pack(side=tk.BOTTOM, padx=10, pady=10)
     
     
     
    if __name__ == "__main__":
        app = App()
        app.mainloop()

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

Discussions similaires

  1. [VB6] load de shapes dans une classe ? (pour faire des contours)
    Par hpfx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/06/2011, 14h59
  2. Réponses: 0
    Dernier message: 11/11/2010, 08h30
  3. Une classe pour mouler des instances qui soient des classes
    Par eyquem dans le forum Général Python
    Réponses: 2
    Dernier message: 03/09/2009, 17h09
  4. cherche bon tuto FR pour creer une classe
    Par Lorenzo77 dans le forum Delphi
    Réponses: 3
    Dernier message: 23/06/2006, 18h27
  5. utiliser des morceaux d'une image pour faire des boutons
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 14/12/2005, 00h05

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