• Questions Python

    From Pierre ESTREM@21:1/5 to All on Mon Aug 29 23:20:02 2022
    Bonjour la liste,

    Dans mon apprentissage de Python, je progresse et sèche sur des points.

    Pour obtenir une liste des méthodes d'un objet de classe Canvas, je lis
    qu'on peut exécuter :
      print dir (Canvas())

    J'obtiens une erreur ; quelle est la bonne syntaxe ?

    D'autre part je ne trouve pas la méthode qui retourne le nom d'un widget pointé mais j'obtiens son type, en faisant :
      print (widget)

    L'instance widget a le focus et j'ai besoin de connaître son type, mais
    de plus son petit nom (ex: listbox1, entry2 etc).

    Merci de m'aider.
    --
    Pierre ESTREM

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?S=C3=A9bastien_NOBILI?=@21:1/5 to All on Tue Aug 30 10:00:01 2022
    Bonjour,

    (Réponse partielle)

    Le 2022-08-29 23:14, Pierre ESTREM a écrit :
    Pour obtenir une liste des méthodes d'un objet de classe Canvas, je
    lis qu'on peut exécuter :
      print dir (Canvas())

    En Python 3 il faut mettre des parenthèses à "print". Ça n'est pas ça
    ton erreur ?

    Sébastien

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marc Chantreux@21:1/5 to All on Tue Aug 30 13:20:01 2022
    Bonjour Pierre,

    Pour obtenir une liste des méthodes d'un objet de classe Canvas, je lis
    qu'on peut exécuter :
    print dir (Canvas())

    c'est de la syntaxe python2 (ce qui me fait me demander quelle doc. tu
    lis: vraiment, si tu n'as pas de code historique à gérer, oublie
    python2).

    J'obtiens une erreur ; quelle est la bonne syntaxe ?

    c'était la bonne syntaxe... il y a longtemps. il faut maintenant mettre
    des parenthèses autour des arguments de print.

    D'autre part je ne trouve pas la méthode qui retourne le nom d'un widget pointé mais j'obtiens son type, en faisant :
    print (widget)
    L'instance widget a le focus et j'ai besoin de connaître son type, mais de plus son petit nom (ex: listbox1, entry2 etc).

    de quoi tu parles quand tu dis "le nom"? si c'est le nom de la variable
    qui y fait référence dans ton programme (ce que je crois comprendre en lisant l'exemple),
    ce soit etre possible en comparant le la référence à toutes les clefs du namespace standard. je ne crois pas que python aie une fonction builtin
    pour ca vu le peu d'intéret de la chose.

    Merci de m'aider.

    Avec plaisir. Je me permet 2 conseils:

    * reposer ces questions aurprès des gens de l'afpy (ils avaient une
    liste de diffusion naguère mais ils ont une vision bien a eux de la
    modernité et sont passés sur discourse: https://discuss.afpy.org/):
    python est exactement le sujet de leurs fora, tu y trouveras des gens
    calés, passionnés et sympa.
    * si tu souhaites explorer les objets, découvrir leurs methodes, les
    valeurs et tout ça (on appelle ça l'introspection), il existe ipython3
    qui devrait de faciliter la vie.

    cordialement,

    --
    Marc Chantreux
    Pôle de Calcul et Services Avancés à la Recherche (CESAR) http://annuaire.unistra.fr/p/20200

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Pierre ESTREM@21:1/5 to All on Tue Aug 30 19:10:01 2022
    Bonjour JF et le Monde,

    Effectivement en Python3 il me fallait encadrer "dir" avec des parenthèses.
    On obtient bien une liste des propriétés et méthodes de la classe passée
    en paramètre de "dir".

    Pour le widget, cela dépendpeut-être de sa nature; as-tu essayé:
       print (widget())

    Avec cette écriture, aucun retour.

    a+

    pierre estrem



    Le 30/08/2022 à 09:47, Jean-François Colas a écrit :
    Bonjour Pierre,

    Avec Python 3, il faudra plutôt écrire:
       print (dir (Canvas))

    La syntaxe que tu utilises pourrait être valide avec Python 2, en
    fonction de ce qu'est Canvas.

    Pour le widget, cela dépendpeut-être de sa nature; as-tu essayé:
       print (widget())

    J.-F.


    Le 29/08/2022 à 23:14, Pierre ESTREM a écrit :
    Bonjour la liste,

    Dans mon apprentissage de Python, je progresse et sèche sur des points.

    Pour obtenir une liste des méthodes d'un objet de classe Canvas, je
    lis qu'on peut exécuter :
       print dir (Canvas())

    J'obtiens une erreur ; quelle est la bonne syntaxe ?

    D'autre part je ne trouve pas la méthode qui retourne le nom d'un
    widget pointé mais j'obtiens son type, en faisant :
       print (widget)

    L'instance widget a le focus et j'ai besoin de connaître son type,
    mais de plus son petit nom (ex: listbox1, entry2 etc).

    Merci de m'aider.
    --
    Pierre ESTREM



    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Pierre ESTREM@21:1/5 to All on Tue Aug 30 19:40:01 2022
    Bonjour,

    La variable "widget" reçoit (pointe au sens de  C ?) l'objet qui a le
    focus (à ce stade je ne sais pas quel objet aurait ce focus).

    """ Mon code

    #!/usr/bin/env python3
    # coding: utf-8

     from tkinter import *
    from tkinter.ttk import *
    import os

    master = Tk()

    def focus(event):
      widget = master.focus_get()
       print(widget()) # Aucun retour

    """

    J'ai testé différentes propriétés mais j'obtiens uniquement la classe de l'objet (ou erreurs) et jamais le nom de la variable pointée.
    Ca doit se faire ! :)

    Pour ipython3 je vois cela, merci.

    a+
    pierre estrem


    Le 30/08/2022 à 13:09, Marc Chantreux a écrit :
    Bonjour Pierre,

    Pour obtenir une liste des méthodes d'un objet de classe Canvas, je lis
    qu'on peut exécuter :
    print dir (Canvas())
    c'est de la syntaxe python2 (ce qui me fait me demander quelle doc. tu
    lis: vraiment, si tu n'as pas de code historique à gérer, oublie
    python2).

    J'obtiens une erreur ; quelle est la bonne syntaxe ?
    c'était la bonne syntaxe... il y a longtemps. il faut maintenant mettre
    des parenthèses autour des arguments de print.

    D'autre part je ne trouve pas la méthode qui retourne le nom d'un widget
    pointé mais j'obtiens son type, en faisant :
    print (widget)
    L'instance widget a le focus et j'ai besoin de connaître son type, mais de >> plus son petit nom (ex: listbox1, entry2 etc).
    de quoi tu parles quand tu dis "le nom"? si c'est le nom de la variable
    qui y fait référence dans ton programme (ce que je crois comprendre en lisant l'exemple),
    ce soit etre possible en comparant le la référence à toutes les clefs du namespace standard. je ne crois pas que python aie une fonction builtin
    pour ca vu le peu d'intéret de la chose.

    Merci de m'aider.
    Avec plaisir. Je me permet 2 conseils:

    * reposer ces questions aurprès des gens de l'afpy (ils avaient une
    liste de diffusion naguère mais ils ont une vision bien a eux de la
    modernité et sont passés sur discourse:https://discuss.afpy.org/):
    python est exactement le sujet de leurs fora, tu y trouveras des gens
    calés, passionnés et sympa.
    * si tu souhaites explorer les objets, découvrir leurs methodes, les
    valeurs et tout ça (on appelle ça l'introspection), il existe ipython3
    qui devrait de faciliter la vie.

    cordialement,


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marc Chantreux@21:1/5 to Pierre ESTREM on Wed Aug 31 07:50:01 2022
    salut Pierre,

    On Tue, Aug 30, 2022 at 07:31:58PM +0200, Pierre ESTREM wrote:
      widget = master.focus_get()
       print(widget()) # Aucun retour

    vraiment: je t'encourage à reposer la question sur le forum de l'afpy.

    * ce tu trouveras des gens plus motivés et connaisseurs pour répondre à cette question
    * je pense que ce genre de questions est vraiment hors sujet ici (en
    tout cas pour ma part je ne suis plus sur les listes python justement
    parce que ce langage me ... laisse dubitatif :))


    bonne chance.

    --
    Marc Chantreux
    Pôle de Calcul et Services Avancés à la Recherche (CESAR) http://annuaire.unistra.fr/p/20200

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Pierre ESTREM@21:1/5 to All on Wed Aug 31 23:30:01 2022
    Bonjour Marc et le Monde,

    La réponse est ici : https://www.developpez.net/forums/d1474088/autres-langages/python/gui/tkinter/obtenir-nom-widget-focus/

    Mais j'ai fait un peu autrement.
    On utilise la propriété "_name" qu'il faut donc fixer à la création du widget.

    # Un extrait

    # Une fenêtre principale
    master=TK()

    # du code ...

    widget=mater.focus_get()

    bouton1=Button(master)
    bouton1._name="bouton1"
    bouton1.pack()

    #  et plein d'autres widgets !

    # Afficherait "bouton1" si il a le focus
    print(widget._name)

    master.mailoop()

    # Fin

    Et ceci m'ouvre des perspectives énormes...

    a+
    pierre estrem


    Le 31/08/2022 à 07:45, Marc Chantreux a écrit :
    salut Pierre,

    On Tue, Aug 30, 2022 at 07:31:58PM +0200, Pierre ESTREM wrote:
      widget = master.focus_get()
       print(widget()) # Aucun retour
    vraiment: je t'encourage à reposer la question sur le forum de l'afpy.

    * ce tu trouveras des gens plus motivés et connaisseurs pour répondre à cette question
    * je pense que ce genre de questions est vraiment hors sujet ici (en
    tout cas pour ma part je ne suis plus sur les listes python justement
    parce que ce langage me ... laisse dubitatif :))


    bonne chance.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)