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

Tkinter Python Discussion :

récupération de la valeur d'un entry depuis un autre module


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 125
    Par défaut récupération de la valeur d'un entry depuis un autre module
    Bonjour à tous,

    dans mon appli, j'ai créé un module regroupant différentes classes d'accés à des boites de dialogue toplevel de Pmw.

    Une de ces boite est de type PromptDialog pour recupérer une entrée utilisateur.
    Mon problème est que je ne parviens pas à récupérer la valeur de saisie depuis le module principal (classe application).
    Lorsque je fais mon valeur_entry.get(), je ne parviens à récupèrer la valeur saisie que dans la classe de la boite de dialogue.

    Comment faut-il faire pour que la variable de la valeur du entry soit visible depuis mon application principale ?

    Merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Hmmmm... avoir un accès à l'instance crée par le module concerné ?
    l'affichage du code source allégé de toutes les classes et méthodes ne concernant pas le problème serait le bienvenu

  3. #3
    Membre confirmé Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 125
    Par défaut
    Bonjour N.tox

    heu, comment ça, l'affichage du code source "ne concernant pas le problème" ?

    Enfin voici le code dispo:

    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
     
    #Dans la classe de l'application principale
    def research_week(self):
        #affiche une boite de dialogue type entry
        GdiaDialogs.query_section(self.parent)
        #recupere la valeur du texte
        ???? #la je ne sait pas
     
     
    #dans le module Dialogs
    class query_section():
     
    	def __init__(self,  parent):
    		self.parent=parent
    		self.__query_section=Pmw.PromptDialog(self.parent,
    						title='Rechercher une section',
    						buttons=('Ok',  'Annuler'),
    					label_text='Saisissez la section recherchée :',
    						entryfield_labelpos='nw',
    						defaultbutton=0,
    						command=self.__execute)
     
    	def __execute(self,  commande):
    		if commande is None or commande=='Annuler':
    			self.__query_section.withdraw()
    		else:
    			value=self.__query_section.get()
    			self.__query_section.withdraw()
    Je comprends qu'il faut que la variable du entry soit visible dans l'application principale, comme dans la classe dialog, mais je ne parviens pas à la récupérée.

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    heu, comment ça, l'affichage du code source "ne concernant pas le problème" ?
    Ce n'est pas ce que j'ai dit, il manque un bout de phrase qui en change tout le sens
    Mais peu importe, cause tu n'a mis que les parties de codes en rapport direct avec ton problème (ce qui est ce que je te demandais)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def __execute(self,  commande):
    		if commande is None or commande=='Annuler':
    			self.__query_section.withdraw()
    		else:
    			value=self.__query_section.get()
    			self.__query_section.withdraw()
    Dans cette méthode, tu set la variable value, mais tu ne la retourne pas...
    Qui plus est, le fait que tu appelle ta méthode "__execute" la rend grossièrement inhéritable, mais surtout plus emmerdante pour y accéder, ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> class A(object):
    	def __execute(self):
    		print 'foo'
     
     
    >>> a=A()
    >>> a.__execute()
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        a.__execute()
    AttributeError: 'A' object has no attribute '__execute'
    >>> a._A__execute()
    foo
    donc, à moins de vraiment vouloir qu'un attribut ou une méthode soit entièrement propre à une classeuniquement, autant éviter les deux underscores devant des noms ... -!!! attention, le fait de rajouter deux underscores en plus a la fin annule ce comportement, et rend juste la méthode ou l'attribut, un poil plus caché pour l'autocomplétion !!!- Bref,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def _execute(self,  commande=None):
                    value    = None if (commande is None or commande=='Annuler') else self.__query_section.get()
    		 self.__query_section.withdraw()
                    return value
    devrait déjà mieux marcher, ensuite dans ta fonction research_week, tu n'affecte l'instance crée à aucune variable, ce qui signifie qu'après tu n'as plus référence vers cette dernière, et tu ne peux plus y accéder. Ceci devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def research_week(self):
        #affiche une boite de dialogue type entry
        fen=GdiaDialogs.query_section(self.parent)
        #recupere la valeur du texte
        res=fen._execute('get')
        return res

  5. #5
    Membre confirmé Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 125
    Par défaut
    Avec ton code, la fenetre toplevel ne s'ouvre pas est la variable res renvoie systematiquement None à priori.

    Dans la ligne :
    res=fen._execute('get'), tu envoie en argument le nom de la fonction. Mais la fonction execute attend le resultat d'un commande ('Ok' ou 'Annuler') non ?
    J'ai également essayer avec les commandes ok et annuler, mais cela ne fonctionne pas mieux.

    Je continu de chercher de mon coté

  6. #6
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Citation Envoyé par bringer Voir le message
    Avec ton code, la fenetre toplevel ne s'ouvre pas est la variable res renvoie systematiquement None à priori.

    Dans la ligne :
    res=fen._execute('get'), tu envoie en argument le nom de la fonction. Mais la fonction execute attend le resultat d'un commande ('Ok' ou 'Annuler') non ?
    J'ai également essayer avec les commandes ok et annuler, mais cela ne fonctionne pas mieux.

    Je continu de chercher de mon coté
    T'as déjà pensé à créer toi même un widget comme cette boîte de dialogue ? Au moins t'en connais le mécanisme interne... Et surtout, j'ai jamais test Pmw... J'vais essayé de te faire un exemple de ce que je voulais dire dans le précédent message...

  7. #7
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    en fait, la modification de la fonction, ne devrait pas fonctionner, ou en tous cas retournerait la valeur de l'entry avant même que l'utilisateur n'ai tapé quoi que ce soit...

    arf, la commande du bouton Ok de de ta boite de dialogue devrait être ta méthode "_execute",
    et dans cette méthode, une fois value ayant une valeur (même None), tu devrait seter un varable de l'objet parent ou faire un appel à une méthode de l'objet parent avec value comme paramètre ...
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def _execute(self,  commande=None):
                     value    = None if (commande is None or commande=='Annuler') else self.__query_section.get()
                     self.__query_section.withdraw()
                     self.parent.uneMethode(value)
    et la fonction researchWeek était alors presque très bien comme elle était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def research_week(self):
        fen=GdiaDialogs.query_section(self.parent)
        return fen

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

Discussions similaires

  1. [Tk] Récupération de la valeur d'un entry
    Par hauru dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 14/11/2011, 14h41
  2. Débutant, valeur d'une variable depuis une autre
    Par fabrice_84 dans le forum Général Python
    Réponses: 11
    Dernier message: 04/11/2009, 09h39
  3. [MySQL] Récupération d'une valeur d'une page vers une autre
    Par fidecourt dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/09/2007, 14h19
  4. Réponses: 10
    Dernier message: 22/08/2007, 18h07
  5. Réponses: 22
    Dernier message: 04/09/2006, 12h53

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