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 :

Tester l'existence d'un objet


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut Tester l'existence d'un objet
    Salut,


    Je veux que mon programme python ouvre une nouvelle fenêtre lorsque l'utilisateur clique sur un bouton. Jusque là, pas de problème. Seulement voilà, si l'utilisateur clique 15 fois sur le bouton, la nouvelle fenêtre s'ouvrira 15 fois.
    Je pense qu'il me faudrait pouvoir trouver une fonction de type :
    if fen2 (nom de mon nouvel objet fenêtre) existe déjà, alors ne pas le créer.

    J'ai testé la commande suivante après le clique de l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
            fen2.destroy()
        except NameError:
            fen2=Tk()
    Ce qui veut dire : Essayer de détruire fen2. Et ensuite lui dire, s'il ne trouve pas fen2, alors créer fen2.

    Mais c'est toujours pareil, il continue à m'ouvrir autant de fois la fenêtre que ce que je clique.

    Quelqu'un aurait il une idée?


    A bientôt!

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    t'as essayé except tout court ? (sans NameError)

  3. #3
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    La façon la plus simple de le faire, je crois, est de toujours avoir ta variable fen2. Tu lui affecteras la valeur None lorsque la fenêtre est fermée, et la référence de la fenêtre si elle existe.

    Donc, pour tester si elle est ouverte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if fen2 is None:
        # elle est fermée
    else:
        # elle est ouverte
    PS: si mes souvenirs sont justes, une fenêtre Tk se porte mieux avec un root.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Bonjour,

    Sans trop m'avancer, je pense que tu utilises tkinter.
    Une méthode élégante consisterait à contourner le problème en désactivant le bouton lorsque la fenêtre est ouverte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def onOuvrir():
        #....creation de la fenetre
        #......
     
        boutonOuvir.config(state="disabled")

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Petite notes d'après ton code

    Citation Envoyé par nicogigo Voir le message
    mon programme python ouvre une nouvelle fenêtre lorsque l'utilisateur clique sur un bouton.
    ...
    try:
    fen2.destroy()
    except NameError:
    fen2=Tk()
    Je présume que tu as déjà une fenêtre Tk pour ton bouton.
    Utilise plutôt un Toplevel, plusieurs fenêtres Tk ce n'est jamais bon.

    Après l'idée d'Antoine_935 est bonne pour empêcher l'ouverture.
    Perso j'utilise isinstance. ex : if isinstance(fen2, Toplevel):

    @+

  6. #6
    Invité de passage
    Homme Profil pro
    Autodidacte Python, HTML/CSS
    Inscrit en
    Avril 2024
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autodidacte Python, HTML/CSS

    Informations forums :
    Inscription : Avril 2024
    Messages : 1
    Par défaut Le faire en 2 fichiers
    En python si ton application est dans le même dossier, tu peux l'importer avec `import nomdufichier` bien sur sans écrire ".py"
    Donc dans ton premier programme tu as tout ta fenêtre avec ton bouton pour ouvrir la deuxième fenêtre.
    Et l'autre programme ta deuxième fenêtre qui as aussi d'autre caractéristique si tu le lance tout seul.

    Tu pourrais faire dans ton premier programme une fonction comme celle-ci :
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def ouverturefen2():
             fen1.destroy()
             import nomdufichier
     
    . . .
    ButtonLancementFen2 = Button(fen1, text="", command=ouverturefen2)
    ButtonLancementFen2.pack()
    Et là normalement ça devrait lancer ta fenêtre et fermé l'autre. Et donc impossible de recliquer sur l'ancienne fenêtre.
    Ensuite si tu veux que l'autre fenêtre reste ouverte la fonction `TopLevel()` est superbe.

    En tous cas j'espère que ma réponse t'aura aider.

  7. #7
    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 GenSi Voir le message
    En tous cas j'espère que ma réponse t'aura aider.
    Ce sujet ayant été ouvert il y a déjà 15 ans... sûr que ça aide!

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

Discussions similaires

  1. [1.x] Comment tester l'existence d'une méthode sur un objet
    Par jekif dans le forum Symfony
    Réponses: 0
    Dernier message: 02/11/2011, 10h48
  2. Comment tester l'existance d'un fichier sans instancier un objet File?
    Par Hamdi Hedhili dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/08/2007, 11h13
  3. Tester l'existence d'un objet
    Par alexadvance dans le forum Visual C++
    Réponses: 9
    Dernier message: 18/04/2007, 13h52
  4. [débutant] Tester l'existence d'un objet
    Par guidav dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/01/2007, 18h53
  5. [C#][1.1] - Comment tester l'existence d'un objet.
    Par RamDevTeam dans le forum Windows Forms
    Réponses: 10
    Dernier message: 08/07/2006, 12h28

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