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 :

"quit" ne marche pas


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut "quit" ne marche pas
    Bonsoir tous
    j'utilise Python 2.6.4 avec idle sous Vista ;
    lorsque je teste le module Tkinter tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    from Tkinter import *
    w=Tk()
    Button(w,text='Quitter',command=w.quit).pack()
    w.mainloop()
    l'appui sur le bouton ne détruit pas la fenêtre ,de plus la tentative de fermeture
    avec le bouton système fait redémarrer l'interpréteur => toutes les variables,fonctions et modules chargés ne sont plus accessibles .
    Pourquoi celà ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Deux pistes

    -Tu ne préserves pas d'instance de ton bouton ex. monBouton = Button ...
    -Que retourne la méthode .pack()? Je pense que c'est 'None'

    Je n'ai plus de doc sur TKinter sous le coude mais mon petit doigt me dit que tout est là.

  3. #3
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    c'est sur, le bouton doit être instancié dans une variable.
    pack doit intervenir sur cette variable (instance).

  4. #4
    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
    Bonsoir,

    Citation Envoyé par VinsS Voir le message
    -Tu ne préserves pas d'instance de ton bouton ex. monBouton = Button ...
    -Que retourne la méthode .pack()? Je pense que c'est 'None'
    ?!
    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monBouton = Button(w, text='Quitter', command=w.quit)
    monBouton.pack()
    Quel intérêt si tu n'as pas besoin d'avoir une référence à monBouton plus tard ? De toute manière command=w.quit garde w.quit.
    None c'est ce que retourne toute fonction sans return quelquechose.

    Je vous laisse réfléchir à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(w, text='Quitter', command=w.destroy).pack()
    Ou, pour être plus pédagogique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import Tkinter
     
    w=Tkinter.Tk()
    Tkinter.Button(w, text='Quitter', command=w.quit).pack()
    w.mainloop()
    w.destroy()
    @+

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    je m'incline...

    ca fait tellement longtemps que je n'utilise plus Tkinter...
    et pourtant c'est la base.

    juste le coup du w.destroy() et je suis KO


  6. #6
    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
    Re,

    Qu'importe le wrapper airod. Ce n'est pas lui qui gère les widgets.
    Celui pour Tkinter c'est sans doute 'la base' mais vous devez avouer que c'est le plus 'universel'.

    @exe2bin:
    Fais des recherches sur .quit(), .destroy() et le mainloop() de Tkinter sur le net.
    Tu trouveras pas mal d'exemples.
    Bonne découverte et bon code.

    @+

  7. #7
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Que la Force soit avec toi PauseKawa !
    Si g bien tout compris ,on doit associer la méthode destroy() à la
    commande quit OBLIGATOIREMENT ...
    Bon suffit de le savoir

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