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 :

Y a-t-il un bug dans ttk ?


Sujet :

Python

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Y a-t-il un bug dans ttk ?
    Bonjour à tous.

    Aujourd'hui, je vais essayer de me montrer sous un meilleur jour que la dernière fois...
    Il s'agit toujours de ma gestion de rendez-vous, avec interface graphique. Dans une fenêtre, je désire avoir des labels qui peuvent avoir deux formats : soir 'P', soit 'F'.

    Je code donc, au début de la classe de fenêtre :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            style=ttk.Style()
            style.configure('.', background='white', foreground='black')
            style.configure('P', borderwidth=1, relief="solid")        
            style.configure('F', borderwidth=0, relief="flat")
    Que j'utilise par exemple de cette façon :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            self.label_date = ttk.Label(self, text="Dates :", style='F')
            self.label_date.grid(row=1, column=0, columnspan=2, padx=10, pady=5, sticky="nsew")
    Quand je fais comme cela, sur ma fenêtre, je vois très bien les zones définies par les labels (leur couleur est différente de la couleur de fond), mais les textes n'apparaissent pas.

    Est-ce que c'est ma façon de programmer (encore !), ou bien autre chose ?

    Merci de votre patience.

    AMIcalement.

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

    Citation Envoyé par L'AMI Yves Voir le message
    Est-ce que c'est ma façon de programmer (encore !), ou bien autre chose ?
    Si je recopie un minimum de vos lignes de code, j'obtiens l'erreur "_tkinter.TclError: Layout F not found".
    Ca serait bien de prendre le temps d'écrire un exemple qui permettre de reproduire ce que vous constatez sans qu'on ait à modifier quoi que ce soit...

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

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Merci en tout cas de vous intéresser à mon message.
    Et je suis aussi désolé que surpris. Pour être franc, ma "définition" des styles comprend deux lignes de plus :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            style=ttk.Style()
            style.configure('.', background='white', foreground='black')
            style.configure('P', borderwidth=1, relief="solid")        
            style.configure('F', borderwidth=0, relief="flat")
            style.layout('P', [('Label', {'sticky': 'nswe'})])
            style.layout('F', [('Label', {'sticky': 'nswe'})])
    et je ne suis pas capable de dire si votre erreur vient de ce manque, mais j'ai recopié ces lignes dans le code de mon application, qui ne donne pas cette erreur.
    Et je ne sais trop quoi découper dans mon appli (elle fait environ 400 lignes) pour en extraire un exemple suffisamment petit et "fonctionnel".

    J'espère que cet ajout vous suffira.

    AMIcalement.

  4. #4
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Citation Envoyé par L'AMI Yves Voir le message
    J'espère que cet ajout vous suffira.
    https://stackoverflow.com/help/minim...ucible-example

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Si on dit:

    Citation Envoyé par L'AMI Yves Voir le message
    Et je ne sais trop quoi découper dans mon appli (elle fait environ 400 lignes) pour en extraire un exemple suffisamment petit et "fonctionnel".
    un "minimum" pour reproduire le problème serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter.ttk as ttk
     
    style = ttk.Style()
     
    style.configure('.', background='white', foreground='black')
    style.configure('P', borderwidth=1, relief="solid")        
    style.configure('F', borderwidth=0, relief="flat")
    style.layout('P', [('Label', {'sticky': 'nswe'})])
    style.layout('F', [('Label', {'sticky': 'nswe'})])
     
    w = ttk.Label( text="Dates :", style='F')
    w.grid(row=1, column=0, columnspan=2, padx=10, pady=5, sticky="nsew")
     
    w.mainloop()
    Et si on vire les lignes qui parle de 'P', ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import tkinter.ttk as ttk
     
    style = ttk.Style()
     
    style.configure('.', background='white', foreground='black')
    style.configure('F', borderwidth=0, relief="flat")
    style.layout('F', [('Label', {'sticky': 'nswe'})])
     
    w = ttk.Label( text="Dates :", style='F')
    w.grid(row=1, column=0, columnspan=2, padx=10, pady=5, sticky="nsew")
     
    w.mainloop()
    Et on reproduit quelque chose (sans 400 lignes de code).

    Maintenant 2 erreurs! La première concerne le nommage du style crée. S'il n'est pas de la forme machin.TLabel comment savoir que les défauts seront à récupérer dans TLabel? On peut appeler çà 'F.TLabel'
    Puis si on regarde le layout d'un TLabel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> style.layout('TLabel')
    [('Label.border', {'sticky': 'nswe', 'border': '1', 'children': [('Label.padding', {'sticky': 'nswe', 'border': '1', 'children': [('Label.label', {'sticky': 'nswe'})]})]})]
    tout est déjà 'sticky': 'nswe' *et* il n'y a pas d'étiquette Label toute seule
    Donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import tkinter.ttk as ttk
     
    style = ttk.Style()
    style.configure('.', background='white', foreground='black')
    #style.configure('P', borderwidth=1, relief="solid")        
    style.configure('F.TLabel', borderwidth=0, relief="flat")
    #style.layout('P', [('Label', {'sticky': 'nswe'})])
    #style.layout('F.TLabel', [('Label.label', {'sticky': 'nswe'})])
    w = ttk.Label(text="Dates :", style='F.TLabel')
    w.grid(row=1, column=0, columnspan=2, padx=10, pady=5, sticky="nsew")
     
    w.mainloop()
    me semble fonctionner (par rapport à ce que j'ai compris).

    Et si vous ne prenez pas le temps de faire fonctionner ce détail sur un petit exemple, c'est pas en le collant dans vos 400 lignes de code que vous allez pouvoir vous concentrer sur comment le faire fonctionner...

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

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Il est clair que mes connaissance en Python sont totalement insuffisantes.
    Je reconnais que j'ai proposé quelques lignes de code, pas de quoi mettre en évidence ce dont je parle.

    Avec mon peu de connaissances, je ne comprends pas bien la question sur machin.TLabel : je pensais que "style.configure('F',...)" définissait 'F' comme un style, que l'on utilisait ensuite dans la définition d'un label : "truc = ttk.Label(..., style='F')" ne me semble pas du tout ambigu.

    Mais pour commencer, je vais me renseigner sur ce que c'est que "TLabel" : je pense que je comprendrai mieux votre réponse...

    Merci, en tous cas.

    AMIcalement.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    style.configure('F',...) définit bien un style.
    Mais le style d'un Label doit avoir certaines caractéristiques pour être utilisable (par un Label) soit on les connait pour toutes les définir soit on "hérite" du style TLabel. Ce qui se raconte avec "F.TLabel" qui dit F est un TLabel ou les attributs ... sont modifiés.

    Citation Envoyé par L'AMI Yves
    Il est clair que mes connaissance en Python sont totalement insuffisantes.
    Les styles n'ont rien à voir avec Python et... sont une fonctionnalité de ttk.
    Comment on apprend à l'utiliser et comment on illustre les soucis rencontrés lorsqu'on demande de l'aide.

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

  8. #8
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Bon, je comprends un petit peu mieux. J'ai modifié mes "style.configure", et mes "self.label" se terminent par "..., style='F.TLabel'), mais ça n'a pas changé : les textes n'apparaissent pas, et, d'ailleurs, les labels ne sont pas ' sticky" nswe" '. Je n'ai pas compris "il n'y a pas d'étiquette Label toute seule"

    Il y a encore un truc que je n'ai pas compris ?

    AMIcalement.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Est ce que la correction que j'ai postée fonctionne (chez vous)?

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

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Malheureusement, non. C'est à cela que je répondais. En un mot comme en cent : TLabel n'a rien changé (à moins que je l'aie mal utilisé, mais je n'ai aucun message d'erreur).

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Chez moi, le texte apparait.
    Et je ne comprends pas trop ce que vous avez bien pu devoir modifier pour faire tourner le bout de code que j'ai posté.

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

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    En reprenant mon code, et en ne conservant que le minimum, les labels correspondent bien à ce que je veux : je pousse plus avant les tests, et je reviens avec un autre problème si nécessaire.

    Merci à tous

    AMIcalement.

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

Discussions similaires

  1. Bug dans le TCheckListBox ?
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 6
    Dernier message: 04/11/2004, 08h39
  2. Bug dans les expressions régulières ?
    Par SergioF dans le forum Linux
    Réponses: 8
    Dernier message: 12/05/2004, 15h14
  3. [PROPERTIES] Bug dans java.util.Properties ?
    Par mathieu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/04/2004, 15h11
  4. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41

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