Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Questions Python

6 réponses
Avatar
Pierre ESTREM
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

6 réponses

Avatar
Sébastien NOBILI
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
Avatar
Marc Chantreux
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
Avatar
Pierre ESTREM
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
Avatar
Pierre ESTREM
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,
Avatar
Marc Chantreux
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
Avatar
Pierre ESTREM
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.