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 :

Classe appelable à la manière d'input()


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Classe appelable à la manière d'input()
    Bonjour,
    Soit:
    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
    import tkinter as tk
     
    class A:
        def __init__(self, root):
            root.bind('<Key>', self.do)
            self.attr = tk.StringVar()
     
        def do(self, evt):
            """ attribut sera dispo qu'après l'usage de return"""
            if evt.keycode == 36: 
                self.attr.set("patati patata")
     
    root = tk.Tk()
    a = A(root)
     
    def tr(*arg):
        """ Quand l'attribut est disponible je le récupère/affiche """
        print('ok', a.attr.get())
     
    a.attr.trace_add('write', tr)
    root.mainloop()
    J'aimerais implémenter le code de façon à l'appeler à la manière d'un input().
    (En d'autres termes, j'aimerais que initialisation de la classe A ne rende la main que quand l'attribut est disponible)
    Résultat souhaité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
    class A:
        ...
    root = tk.Tk()
    a = A(root) 
    print(a) #retournant "patati patata"
    root.mainloop()
    J'ai essayé en vain plusieurs approches, mais je tourne en rond...
    Comment dois-je m'y prendre?
    (Du moins si je ne cours pas après une chimère)

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

    La façon simple est d'entrer dans mainloop et de n'en sortir que lorsque l'entrée est terminée.
    Il y a aussi des façons particulières pour entrer dans une attente et en sortir avec un Toplevel (wait_window) ou une Variable (wait_variable).

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

  3. #3
    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
    Merci, je vais voir parmi tes propositions ce que je pourrais mettre en œuvre dans mon code originel...

  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
    Super, j'ai facilement pu mettre en œuvre ta première solution sur mon code originel .
    Comme il s'agit d'une classe appelant une autre classe, je me retrouve avec 2 mainloop(), une première pour moi^^
    Encore merci, je peux maintenant reposer mes neurones et mes yeux en surchauffes.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Comme il s'agit d'une classe appelant une autre classe, je me retrouve avec 2 mainloop(), une première pour moi
    Ce n'est pas "interdit", on peut faire des appels successifs à mainloop... le prochain appel à quit ne terminera que le dernier appel. Ce qui permet de sérialiser des opérations (à la input qui bloque).
    Les wait_[window|visibility|variable] sont plus simples à utiliser: on sait ce qu'on attend sans être obligé d'ajouter un callback pour exécuter le quit.

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

  6. #6
    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
    Citation Envoyé par wiztricks
    Les wait_[window|visibility|variable] sont plus simples à utiliser: on sait ce qu'on attend sans être obligé d'ajouter un callback pour exécuter le quit.

    - W
    En effet
    wait_variable répond parfaitement à mon attente.
    C'est dingue le temps que j'ai passé à vouloir réinventer la roue.
    De plus je n'avais pas réussi à formuler les mots clefs pour en trouver la réponse sur le net.
    La réponse était toute simple.... pour celui qui la connait^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2009, 16h55
  2. Plugin qui me donne les class appelée.
    Par LesDeuxZ dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/10/2008, 03h14
  3. Réponses: 9
    Dernier message: 23/09/2008, 18h00
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. [css] plusieurs classes appellées? comment ça marche
    Par luta dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/11/2005, 00h20

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