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

  1. #1
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    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 : 920
    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 736
    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 736
    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
    920
    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 : 920
    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
    920
    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 : 920
    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 736
    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 736
    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
    920
    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 : 920
    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^^

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    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^^
    Une bonne pratique est de prendre le temps de lire la documentation.
    Sûr que le nez dans le guidon et sans trop savoir ce qu'on cherche parfois ça va plus vite de coder son truc.

    Il faut la (re)lire, après le feu, à tête reposée pour découvrir le machin qui nous aurait éviter de... Pas parce qu'on ne l'a pas vu les autres fois, mais parce qu'on comprend mieux quoi en faire, à quel besoin ça peut répondre.

    C'est la grande difficulté des documentations techniques, il y a trop de choses dont on ne saisira l'intérêt que lorsqu'on se retrouvera confronté au cas de figure qui...

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

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Juste par curiosité, pour quelle raison tu voulais faire cela ?

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    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 : 920
    Billets dans le blog
    8
    Par défaut
    C'est pour la création d'un genre d'Entry 100 % graphique sur Canvas dont le contenu une fois validé est transmis au corps du programme pour d'autres traitements... Je voulais des briques indépendantes chose que je n'arrivais pas à faire avec la problématique rencontrée.

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ok merci.

+ 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