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

GUI Python Discussion :

Modifier les attributs de Treeview pour avoir un fond totalement noir


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Par défaut Modifier les attributs de Treeview pour avoir un fond totalement noir
    Bonjour,
    Je développe un programme où la charte graphique exige que le fond soit noir et les écritures en blanc J'utilise des widgets "ttk" et j'ai configuré un objet Style pour le treeview afin de le rendre conforme à la charte graphique. Malheureusement cela ne fonctionne pas. Je vous adresse la partie de code concernée :
    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 os
    import tkinter as tk
    import tkinter.ttk as ttk
    from tkinter import PhotoImage
     
    class App(tk.Frame):
        def __init__(self, master, path):
            tk.Frame.__init__(self, master)
            self._img = PhotoImage(file="video.png")  # change to your file path
            self._img1 = PhotoImage(file="dossier.png")
     
            style = ttk.Style(root)
            style.theme_use("clam")
            style.configure("Custom.Treeview.Heading", background="black", foreground="white", relief="flat", fieldbackground="black")
     
            self.tree = ttk.Treeview(self, style='Custom.Treeview')
            self.tree["columns"] = ("one", "two")
            self.tree.tag_configure('#0', background='#000000')
            ysb = tk.Scrollbar(self, orient='vertical', width=5, command=self.tree.yview)
            self.tree.configure(yscroll=ysb.set, height=15)
            self.tree.column('#0', width=300)
            self.tree.heading('#0', text=path, anchor='w')
            self.tree.column('one', width=150)
            self.tree.heading('one', text='Info1')
            self.tree.column('two', width=150)
            self.tree.heading('two', text='Info2')
            abspath = os.path.abspath(path)
            root_node = self.tree.insert('', '0', text=abspath, open=True)
            self.process_directory(root_node, abspath)
     
            self.tree.grid(row=0, column=0, sticky='EW')
            ysb.grid(row=0, column=1, sticky='ns')
            self.grid(sticky='EW')
    Merci pour votre contribution

    Charles GRIFFE

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Puisque tu as créé un style c'est peut-être lui que tu dois utiliser self.tree = ttk.Treeview(self, style=style)J'ignore si c'est la solution, mais ça me paraît plus logique.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Par défaut Modifier les attributs de Treeview pour avoir un fond totalement noir
    Bonjour Vincent,

    Tout d'abord merci pour ta réponse. J'ai testé ta proposition mais il semble que style ne soit pas un attribut d'une instance d'une classe ttk mais affecte directement la clase, Treeview en l’occurrence.

    La question reste ouvert...
    Bonne journée.

    Charles GRIFFE

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

    Citation Envoyé par charlesgriffe13 Voir le message
    Malheureusement cela ne fonctionne pas. Je vous adresse la partie de code concernée :
    Votre code ne fonctionne pas.

    S'il faut que j'y mette mes pattes dedans pour le faire marcher... vous avez déjà plein d'exemples sur Internet.

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

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Par défaut
    Rebonjour,

    Désolé pour mon message initial. Le code était tronqué. Je renvoie une autre version exécutable :

    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
    import os
    import tkinter as tk
    import tkinter.ttk as ttk
    from tkinter import PhotoImage
    import hashlib
     
    class App(tk.Frame):
        def __init__(self, master, path):
            tk.Frame.__init__(self, master)
            self._img = PhotoImage(file="videoNEG.png")  # change to your file path
            self._img1 = PhotoImage(file="dossierNEG.png")
     
            style = ttk.Style(root)
            style.theme_use("clam")
     
            self.tree = ttk.Treeview(self)
            ysb = tk.Scrollbar(self, orient='vertical', width=5, command=self.tree.yview)
            self.tree["columns"] = ("one",)
            self.tree.configure(yscroll=ysb.set, height=15)
            self.tree.column('#0', width=300)
            self.tree.column('#1', width=250)
            self.tree.heading('#0', text=path, anchor='w')
            self.tree.heading('one', text='Empreinte', anchor='w')
     
            abspath = os.path.abspath(path)
            #  self.tree.tag_configure('oddrow', background="#000000")
            root_node = self.tree.insert('', 'end', text=abspath, open=True)
            self.process_directory(root_node, abspath)
     
            self.tree.grid(row=0, column=0, sticky='EW')
            ysb.grid(row=0, column=1, sticky='ns')
            #  xsb.grid(row=1, column=0, sticky='ew')
            self.grid(sticky='EW')
     
        def hash_file(self, fichier):
            return hashlib.md5(open(fichier, 'rb').read()).hexdigest()
     
        def process_directory(self, parent, path):
            for p in os.listdir(path):
                abspath = os.path.join(path, p)
                isdir = os.path.isdir(abspath)
                if p[-3:] == 'pdf':
                    oid = self.tree.insert(parent, 'end', text=p, open=True, image=self._img, values=(self.hash_file(abspath),))
                if isdir:
                    oid = self.tree.insert(parent, 'end', text=p, open=True, image=self._img1)
                    self.process_directory(oid, abspath)
     
    if __name__ == '__main__':
        root = tk.Tk()
        path_to_my_project = 'c:/python etude'
        app = App(root, path=path_to_my_project)
        app.mainloop()
    Merci pour ta contribution.

    Charles GRIFFE

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par charlesgriffe13 Voir le message
    Désolé pour mon message initial. Le code était tronqué. Je renvoie une autre version exécutable :
    Chouette, si l'intention de départ était de modifier la couleur du fond avec des Style, çà a disparu...

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

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

    Un exemple minimal pour reproduire ce que j'ai compris du problème:
    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
    import tkinter as tk
    from tkinter import ttk
     
    root = tk.Tk()
     
    style = ttk.Style()
    # set ttk theme to "clam" which support the fieldbackground option
    style.theme_use("clam")
    style.configure("Treeview", background="black", 
                    fieldbackground="black", foreground="white")
     
    tree = ttk.Treeview(root)
    tree.insert("", 0, "item", text="item")
    tree.pack()
     
    root.mainloop()
    On devrait voir le fond (là où il n'y a pas d'items) en "black" et le "fond" des fields (là où il y a des items) aussi en noir.

    Tout ce que je peux dire après quelques tests est qu'on a le fonctionnement attendu avec Python 3.6 mais on perd le rendu du "fieldbackground" lorsqu'on teste avec 3.7 et plus.

    Ce qui fait penser à un "bug" plutôt côté Python (car les versions de TCL sont à priori identiques) à investiguer.

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

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 10
    Par défaut
    Merci beaucoup pour la réponse,

    C'est effectivement la conclusion à laquelle j'étais arrivé. C'est le premier langage "libre" que je pratique (j'étais sur des langages "traditionnels" type C#). Est ce qu'on peut s'attendre à ce que ce bug soit fixé ou vaut-il mieux que je cherche une autre solution sur une autre bibliothèque (tix par exemple) ?

    Merci encore

    Charles GRIFFE

Discussions similaires

  1. problème pour modifier les attributs de ma corbeille
    Par lucandré dans le forum Windows XP
    Réponses: 3
    Dernier message: 14/12/2007, 17h45
  2. [AJAX] Modifier les attributs css
    Par acieroid dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/04/2007, 00h41
  3. Impossible de modifier les attributs de dossiers
    Par junio dans le forum Windows XP
    Réponses: 2
    Dernier message: 14/02/2007, 09h26
  4. comment modifier les attributs d'un fichier?
    Par kamal101 dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2005, 14h16
  5. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26

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