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 :

Savoir par un script si un widget est ou n'est pas visible à l'écran


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut Savoir par un script si un widget est ou n'est pas visible à l'écran
    Ne me dites pas s'il vous plaît que je n'ai qu'à mettre des lunettes.
    J'ai un script qui fabrique 15 labels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hold = [ ]
    for x in range(15):
        hold.append(Tk.Label(fen1))
        hold[x] = Tk.Label(fen1, text="HOLD", fg="red", bg="black",
                      font=tkFont.Font(family="Courier 12 Pitch", size=18, weight="bold"))
    ces Labels sont positionnés individuellement via la méthode place, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hold[3].place(x=360,y=500)
    ou cachés par

    Ce que je voudrais savoir faire c'est questionner dans le script un (ou plusieurs) Label en particulier pour savoir
    s'ils est "visible" ou non, c'est à dire présent ou absent de l'écran.
    Autrement dit quel "attribut ou propriété" du widget permet de détecter sa présence effective.
    J'ai utilisé des Labels, mais je peux utiliser si c'est plus facile des Button ou des Canvas....
    Je sais qu'il me suffirait dans la liste hold de marquer par un 1 ou un 0 l'état visible ou non du label considéré ou de créer un dictionnaire avec un clé "visible" et son état. Mais j'aimerais que ce soit le label lui même qui me parle.
    Merci de vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par azad2b Voir le message
    Ne me dites pas s'il vous plaît que je n'ai qu'à mettre des lunettes.
    Ah, de l'humour. J'aime bien
    En plus tu as veillé à indenter ton code pour qu'il ressorte bien, ça c'est sympa. Juste que tu te serais baladé sur le forum tu aurais vu comment font les autres. Ils utilisent les balises [code] et [/code] et plus de souci.

    Citation Envoyé par azad2b Voir le message
    Ce que je voudrais savoir faire c'est questionner dans le script un (ou plusieurs) Label en particulier pour savoir
    s'ils est "visible" ou non, c'est à dire présent ou absent de l'écran.
    Autrement dit quel "attribut ou propriété" du widget permet de détecter sa présence effective.
    Personnellement je n'utilise pas tk mais Qt. Et sous cette librairie, les objets possèdent une propriété isVisible() (ainsi que son opposée isHidden() ce qui m'étonne un peu mais bon...). A mon avis, tk, même si son principe n'est pas le même, doit quand-même avoir des propriétés similaires...

    Sinon j'ai trouvé un truc ici: https://stackoverflow.com/questions/...get-is-visible...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    Sinon j'ai trouvé un truc ici: https://stackoverflow.com/questions/...get-is-visible...
    Hélas cela m'envoie une erreur issue, non du script, mais de l'interpréteur Python lui-même. L'option "isvisible" bien que très prometteuse d'après sa syntaxe semble inconnue par tkinter. Mais je vais tenter le coup avec Qt
    Merci en tout cas, de ta réponse.

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

    Les méthodes à utiliser sont .winfo_isvisible ou .winfo_viewable (et on regarde la documentation pour voir ce que ça fait et on teste...)

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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Hello wiztricks
    Bien mais j'ai deux problemes
    Le premier est que .winfo_viewable semble fonctionner sous tkinter, (pas .winfo_isvisible mais ce n'est pas important)
    par contre ( je vous rappelle que j'ai des Labels qui sont les objets de la liste hold[ ] formée de 15 éléments. Ces labels ont définis dans un module appelé gui.py sous la définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hold[x] = Tk.Label(fen1, text="HOLD", fg="red", bg="black",font=tkFont.Font(family="Courier 12 Pitch", size=18, weight="bold"))
    or si dans mon script principal je fais ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(0,5):
        print(hold[i].winfo_viewable)
    la réponse est
    <bound method Misc.winfo_viewable of <tkinter.Label object .!label2>>
    <bound method Misc.winfo_viewable of <tkinter.Label object .!label4>>
    <bound method Misc.winfo_viewable of <tkinter.Label object .!label6>>
    <bound method Misc.winfo_viewable of <tkinter.Label object .!label8>>
    <bound method Misc.winfo_viewable of <tkinter.Label object .!label10>>
    Ne suis-je pas en droit de me poser des questions sur le fait que l' interpréteur à renommé mes labels à sa guise.
    En outre j'ai fait ce test dans la boucle ou sont affichés les labels en question et ma question n'est pas de savoir s'ils sont visibles, mais bien s'ils sont affichés.
    Donc j'admet que wiewable n'est pas assez précis il doit y avoir mieux
    Maintenant, une question plus générale, j'ai noté chez vous le conseil pertinent et constant de consulter la documentation, ce qui est très sage. J'ai une doc de tkinter qui fait 360 pages. Pouvez-vous me donner un lien pour mieux que ce dont je dispose ? Merci d'avance

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Le premier est que .winfo_viewable semble fonctionner sous tkinter, (pas .winfo_isvisible mais ce nest pas important).
    Oops, je me suis trompé, c'est .winfo_ismapped mais comme vous avez ouvert la documentation...

    Citation Envoyé par azad2b Voir le message
    or si dans mon script principal je fais ce test
    .winfo_ismapped ou .winfo_viewable sont des méthodes. Elles retournent une information lorsqu'elles sont appelée.
    Et comment on appelle une fonction/méthode est ce que vous devez avoir appris avant de vous aventurer dans tkinter...

    Citation Envoyé par azad2b Voir le message
    Ne suis-je pas en droit de me poser des questions sur le fait que l' interpréteur à renommé mes labels à sa guise.
    Qu'appelez vous le nom du Label?
    Ici vous montrez une information construite via la méthode repr appliquée à cette méthode là...
    Ca se retrouve avec tous les objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def f():pass
    ...
    >>> f
    <function f at 0x0000012763CBE040>
    >>> print(f)
    <function f at 0x0000012763CBE040>
    >>>
    et comme on peut modifier cette sortie pour donner des informations plus "parlantes"...

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

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    il ressort de tout cela que tkinter est capable de me dire que le label que j'ai nommé hold[n] où hold[] est une liste de label existe, mais il m'en donne un autre nom. Comme on le voit sur les sorties de la console que j'ai passées ici. Et le fait qu'il me change le nom de ces labels semble montrer qu'il retourne non pas une liste, mais un dictionnaire. C'est peut être la raison de ce que l'on voit dans les sorties que je j'ai passées.
    Je crois que je vais suivre la voie indiquée par Sve@r qui utilise la bibliothèque PyQt laquelle permet de créer des widgets possédants une propriété "isvisible et qui semble fonctionner comme je le souhaite, en répondant True ou False selon le cas.
    Maintenant, si vous avez un bon lien pour une doc sériese de tkinter, je suis preneur.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par azad2b Voir le message
    il ressort de tout cela que tkinter est capable de me dire que le label que j'ai nommé hold[n] où hold[] est une liste de label existe, mais il m'en donne un autre nom.
    hold[n] n'est pas le nom du Label mais le nième item de la liste hold.

    Citation Envoyé par azad2b Voir le message
    Et le fait qu'il me change le nom de ces labels semble montrer qu'il retourne non pas une liste, mais un dictionnaire.
    "<bound method Misc.winfo_viewable of <tkinter.Label object .!label2>>" est une chaîne de caractère qui donne des informations sur la méthode/ objet récupéré via hold[i].winfo_viewable.

    Citation Envoyé par azad2b Voir le message
    Je crois que je vais suivre la voie indiquée par Sve@r qui utilise la bibliothèque PyQt laquelle permet de créer des widgets possédants une propriété "isvisible et qui semble fonctionner comme je le souhaite, en répondant True ou False selon le cas.
    Si vous ne savez pas faire la différence entre l'objet méthode - hold[i].winfo_viewable - et l'appeler - hold[i].winfo_viewable() - c'est peut être parce que vous n'avez pas trop pris le temps d'apprendre les bases (car ça n'a rien à voir avec tkinter). Et si vous voulez passer à PyQt qui est bien plus compliqué: bon courage!

    Citation Envoyé par azad2b Voir le message
    Maintenant, si vous avez un bon lien pour une doc sériese de tkinter, je suis preneur.
    Les documentations sérieuses sur tkinter sont mentionnées dans la documentation Python. Et à priori, lorsqu'on se lance à utiliser une bibliothèque "standard", c'est par là qu'on est supposé commencer. Ce qui est guère différent de la mise en œuvre d'une (nouvelle) machine à café: on essaie de comprendre ce qui est écrit dans le manuel avant de la brancher...

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

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonsoir !

    Voici une petite suggestion :
    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
    from tkinter import *
     
    def delete():
        l.place_forget()
     
    def test():
        print(l.place_info().__contains__('in'))
     
    root = Tk()
    root.geometry("500x350")
    l = Label(root, text="HOLD")
    l.place(x=250, y=100)
    b1 = Button(root, text="DEL", command=delete)
    b1.place(x=250, y=175)
    b2 = Button(root, text="TEST", command=test)
    b2.place(x=250, y=250)
    root.mainloop()


    Est-ce que ça vous convient ?

    Petite astuce pour trouver des fonctions : print(dir(l))
    Dernière modification par Invité ; 23/12/2021 à 23h11.

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

    Je ne vois pas la difficulté de tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> from tkinter import Label
    >>> label = tk.Label()
    >>> label.winfo_viewable()
    0
    >>> label.winfo_ismapped()
    0
    >>> label.pack()
    >>> label.winfo_viewable()
    1
    >>> label.winfo_ismapped()
    1
    Et si on donne un nom au Label, le repr en tiendra compte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> label = tk.Label(name='toto')
    >>> label.winfo_viewable
    <bound method Misc.winfo_viewable of <tkinter.Label object .toto>>
    >>>
    Citation Envoyé par LeNarvalo Voir le message
    Voici une petite suggestion :
    Ca ne répond pas à la question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> frame = tk.Frame()
    >>> label = tk.Label(frame)
    >>> label.pack()
    >>> label.pack_infos()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'Label' object has no attribute 'pack_infos'
    >>> label.pack_info()
    {'in': <tkinter.Frame object .!frame2>, 'anchor': 'center', 'expand': 0, 'fill': 'none', 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'side': 'top'}
    >>> label.winfo_ismapped()
    0
    >>> label.winfo_viewable()
    0
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Invité
    Invité(e)
    Par défaut
    En effet c'était une alternative farfelue comme je les aime, s'il utilise une frame dans ce cas remplacer l.place_info().__contains__('in') par frame.place_info().__contains__('in') and l.place_info().__contains__('in') et ainsi de suite.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    En effet c'était une alternative farfelue comme je les aime...
    Ah super! Pensez vous que faire le guignol... aide beaucoup?
    En plus 'in' in l.place_info() est quand même plus digeste que l.place_info().__contains__('in')...

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

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ah super! Pensez vous que faire le guignol... aide beaucoup?
    En plus 'in' in l.place_info() est quand même plus digeste que l.place_info().__contains__('in')...

    - W


    Ben oui ! Ca permet de voir la chose d'une façon plus amusante, après chacun ses goûts, toi visiblement tu préfères rouler des mécaniques...

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Ben oui ! Ca permet de voir la chose d'une façon plus amusante, après chacun ses goûts, toi visiblement tu préfères rouler des mécaniques...
    J'essaie d'apporter des réponses technique à des problèmes techniques. Et si vous lisez du code ou des documentations techniques, vous constateriez que ça ne rigole pas car on s'applique a être clair et concis.

    On peut considérer un forum de développeurs comme le bar du coin... et y raconter n'importe quoi pour amuser la galerie. Mais une discussion est aussi une sorte de document que d'autres pourront consulter plus tard pour trouver des solutions et trier les bavardages ne les aidera pas beaucoup.

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

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Mais je vais tenter le coup avec Qt
    Euh... faut pas se dire que ce sera pareil. Déjà Qt ça s'installe (contrairement à tk qui est inclus dans Python) et surtout son mécanisme basé sur signal/slot est totalement différent de tk. Bref tu peux pas te dire "yeah le portage c'est telle instruction tk devient telle instruction Qt" parce que ce n'est pas du tout le cas. Passer sous Qt uniquement pour éviter de devoir gérer un flag visible/pas visible dans tes labels (en admettant qu'il n'y ait effectivement aucune autre solution)...

    Après si tu veux te lancer parce que tu as vraiment un besoin fort d'une GUI plus complète... https://pyqt.developpez.com/telechar.../47/Hello-Word

    Citation Envoyé par LeNarvalo Voir le message
    Ah ben voilà, ça n'a pas trainé...

    Mais wiztricks a raison. Sans parler de faire le guignol, la méthode __contains__ est une méthode privée destinée à assurer le travail de l'opération "in". Donc il est plus propre de passer par l'opération officielle (syntaxe plus générale, qui marchera même si demain l'objet change de nature) que de passer par la méthode privée spécifique à l'objet.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Invité
    Invité(e)
    Par défaut
    Sve@r Oui c'était un peu abusé d'utilisé __contains__ ! ["lol"].__iter__().__next__() !

  17. #17
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Bonjour
    La réponse donnée par LeNarvalo, n'est peut-être pas très académique, mais comme je ne suis pas moi
    même académicien, je suis bien obligé d'admettre qu'elle répond partiellement à ma question.
    En l'occurrence elle renvoie effectivement True tant que le bouton est visible, et bien entendu,
    elle en fait de même si la cible n'est pas un bouton, mais un Label.
    La critique formulée par wiztricks par contre n'est guère lumineuse pour moi, car extraite d'un contexte
    dont j'ignore tout, je ne vois pas comment je pourrais en tirer partie.
    Je constate simplement que s'il existe une commande telle celle qu'utilise LeNavarvalo
    print(l.place_info().__contains__('in'))
    je voudrais bien ne pas me limiter à la simple option contains in
    Je n'ai pas trouvé dans la doc tkinter cette commande listant "TOUTES" les informations disponible pour un widget quel
    qu'il soit. Celui qui va me la donner, sera le bienvenu.
    Et comme c'est Noël et qu'avec lui, on est en période de trêve, ce serait bien si vous sautiez sur l'occasion
    de ne pas vous disputer.
    D'autre part, Sve@r est intervenu dans le sujet et je constate qu'effectivement Qt, n'est pas une simple bibliothèque
    de la quelle je pensais pouvoir extraire la commande (is_visible) tout simplement. C'est bien plus que cela en effet !!!

    Je vous signale, pour la petite histoire que mon projet consiste à transposer pour des amis, un utilitaire que j'ai
    créé jadis en C et que je suis en train de porter sur Rasberry. Et que pour cela, histoire de l'agrémenter d'une interface
    graphique moderne, j'ai décidé de me lancer dans ce @"!!§@^^@ python de {{#"@}}:= pensant pouvoir m'en servir
    comme on l'aurait fait d'un bon vieux Basic de jadis. J'ai déchanté.
    Merci de vos interventions et bonnes fêtes de fin d' année à tous.


    PS. il suffit de se poser la question pour que la réponse survienne : print(dir(label)) est très bavard, mais j'avais de toute façon et de manière détournée résolu mon problème assez simplement de la façon suivante : à chaque fois qu'un label se remplit (ou apparait) à l'écran je colle un 1 dans une Liste me donnant l'état de tous mes labels.
    J'ausculte donc cette liste et je sais qui est là ou est absent.

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Je n'ai pas trouvé dans la doc tkinter cette commande listant "TOUTES" les informations disponible pour un widget quel qu'il soit.
    1 - Une telle documentation n'existe pas car tkinter n'est qu'une interface avec TCL/Tk. On documente comment est construite l'interface et on regarde la documentation de TCL/Tk.
    2 - Toutes les commandes de TCL/Tk ne sont pas accessibles depuis tkinter (il faut appeler l'interpréteur TCL directement). Et dans cette documentation là, il y a tout mais c'est une documentation technique: c'est du boulot pour la lire.
    3 - Les appels à widget.winfo_viewable() et widget.winfo_ismapped() font le boulot (comme montré dans cette réponse)

    Citation Envoyé par azad2b Voir le message
    j'ai décidé de me lancer dans ce @"!!§@^^@ python de {{#"@}}:= pensant pouvoir m'en servir comme on l'aurait fait d'un bon vieux Basic de jadis. J'ai déchanté.
    Ah ben c'est sur que dans un forum de discussion si on parle de méthode (à appeler) et qu'on se retrouve avec des questions sur le nom des widgets à cause de la sortie de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> label.winfo_viewable
    <bound method Misc.winfo_viewable of <tkinter.Label object .toto>>
    il est certain que vous avez sous estimé les difficultés et le temps d'apprentissage.

    Citation Envoyé par azad2b Voir le message
    il suffit de se poser la question pour que la réponse survienne : print(dir(label)) est très bavard, mais j'avais de toute façon et de manière détournée résolu mon problème assez simplement de la façon suivante : à chaque fois qu'un label se remplit (ou apparait) à l'écran je colle un 1 dans une Liste me donnant l'état de tous mes labels.
    C'est le réflexe de tout programmeur qui veut avancer sans perdre du temps à découvrir les solutions qui existent...

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

  19. #19
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par azad2b Voir le message
    La critique formulée par wiztricks par contre n'est guère lumineuse pour moi, car extraite d'un contexte
    dont j'ignore tout, je ne vois pas comment je pourrais en tirer partie.
    Je constate simplement que s'il existe une commande telle celle qu'utilise LeNavarvalo
    print(l.place_info().__contains__('in'))
    je voudrais bien ne pas me limiter à la simple option contains in
    En fait, les objets possèdent des méthodes internes permettant de répondre aux appels standards. Exemple inclure la méthode __add__() dans un objet "truc" permettra d'utiliser l'opérateur "+". Ainsi tu pourras écrire x+y avec "x" et "y" étant deux trucs, l'opértion sera effectuée.
    Mais justement ces méthodes internes sont faites pour être transparentes, pour coller à un schéma universel. Il est plus pratique de pouvoir toujours écrire x+y quels que soient la nature de "x"et celle de "y" que de choisir un coup "+" et un coup __add__ selon la nature des éléments que tu manipules.
    Si par exemple tu as une liste d'éléments auxquels tu veux rajouter 1, ce sera plus pratique une simple boucle sur chaque élément et pour chacun demander "+1" que d'aller faire "+1" sur certains et __add__(1) sur les autres.

    Citation Envoyé par azad2b Voir le message
    Je vous signale, pour la petite histoire que mon projet consiste à transposer pour des amis, un utilitaire que j'ai
    créé jadis en C et que je suis en train de porter sur Rasberry. Et que pour cela, histoire de l'agrémenter d'une interface
    graphique moderne, j'ai décidé de me lancer dans ce @"!!§@^^@ python de {{#"@}}:= pensant pouvoir m'en servir
    comme on l'aurait fait d'un bon vieux Basic de jadis. J'ai déchanté.
    Ah effectivement, Python étant bien plus puissant qu'un bon vieux basic, il nécessite en retour un peu plus d'investissement pour l'apprendre. Mais inversement une fois un peu à l'aise avec, tu développeras un même truc 10 fois plus rapidement en Python qu'en basic.
    Citation Envoyé par azad2b Voir le message
    il suffit de se poser la question pour que la réponse survienne : print(dir(label)) est très bavard, mais j'avais de toute façon et de manière détournée résolu mon problème assez simplement de la façon suivante : à chaque fois qu'un label se remplit (ou apparait) à l'écran je colle un 1 dans une Liste me donnant l'état de tous mes labels.
    J'ausculte donc cette liste et je sais qui est là ou est absent.
    Oui enfin tu l'avais dit dans ton premier post ça. Rajouter un flag de visibilité pour chaque label. Et au lieu de gérer une liste "à part" tu peux très bien créer ton propre objet qui hérite d'un label mais qui contient en plus un flag visible ou pas. Ensuite tu surcharges la fonction dédiée à l'affichage du label et là tu mets à jour le flag. Et tu rajoutes à ton objet une méthode "isVisible()" qui t'indique l'état du flag. Ainsi une seule liste au lieu de deux.

    Exemple(bon je ne connais pas tk donc je vais "simuler" certaines notions): imaginons qu'un label tk se nomme "tkLabel" et soit affiché par la méthode "show()". Dans cet exemple, tu l'utiliserais de cette façon: label=tkLabel("Hello"); label.show().
    Bon ben maintenant tu crées ton propre objet qui hérite de tkLabel
    Code python : 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
    class myLabel(tkLabel):
    	def __init__(self, *args, **kwargs)
    		# D'abord on appelle le constructeur du tkLabel d'origine
    		super().__init__(*args, **kwargs)
     
    		# Le flag de visibilité
    		self.__visible=False
    	# __init__()
     
    	# Surcharge de la méthode show()
    	def show(self, *args, **kwargs)
    		# D'abord on appelle la méthode show du tkLabel d'origine
    		super().show(*args, **kwargs)
     
    		# On met à jour le flag
    		self.__visible=True
    	# show()
     
    	# La méthode qui dit si le label est visible ou pas
    	def isVisible(self): return self.__visible
    # myLabel

    Du côté de l'utilisateur, absolument aucun changement. L'instruction label=tkLabel("Hello"); label.show() devient label=myLabel("Hello"); label.show(). Sauf que maintenant tu as la possibilité de demander en plus label.isVisible(). C'est ça l'avantage de l'héritage: profiter de l'existant tout en pouvant lui rajouter des éléments personnels...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [XL-2013] Comment savoir si une ligne est totalement visible à l'écran ?
    Par CognitiKom dans le forum Macros et VBA Excel
    Réponses: 75
    Dernier message: 29/11/2016, 19h28
  2. Réponses: 4
    Dernier message: 10/04/2010, 14h01
  3. Détecter un bug qui n'est pas visible par tous
    Par Droïde Système7 dans le forum Débuter
    Réponses: 9
    Dernier message: 01/04/2009, 19h17
  4. Tabulation croisée n'est pas visible
    Par Kihmé Xs dans le forum iReport
    Réponses: 2
    Dernier message: 09/04/2008, 10h36
  5. Réponses: 3
    Dernier message: 16/09/2006, 18h08

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