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

GTK+ avec Python Discussion :

Fermeture des boites de dialogue


Sujet :

GTK+ avec Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut Fermeture des boites de dialogue
    Bonsoir

    Je suis débutant et je trouve qu'il y a un comportement étonnant concernant la fermeture des boites de dialogue.

    Voici un exemple :
    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
    #! /usr/bin/env python
     
    import time, gtk
     
    def validation():  
    	dialog = gtk.MessageDialog(None,0,gtk.MESSAGE_QUESTION,gtk.BUTTONS_OK_CANCEL,'Validez ou Annulez')
    	c=dialog.run()  
    	dialog.destroy()
    	if c == gtk.RESPONSE_OK:
    		return 1
    	return 0
     
    if validation():
    	print "Vous avez choisi de valider !"
    else:
    	print "Vous avez choisi d'annuler !"
     
    time.sleep(5)
    Le script imprime bien "vous avez choisi de valider" (ou d'annuler), en revanche la boite de dialogue reste ouverte jusqu'à ce que le script se termine (avec le sleep 5 secondes).

    Or je m'attendais plutôt à ce que la boîte se ferme au moment où je clique sur "valider" ou "annuler" directement.

    Comment expliquer cela ?

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Par défaut
    Bonjour,


    A mon avis tu dois fermer ta dialog après avoir testé le retour :

    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
    #! /usr/bin/env python
     
    import time, gtk
     
    def validation():  
    	dialog = gtk.MessageDialog(None,0,gtk.MESSAGE_QUESTION,gtk.BUTTONS_OK_CANCEL,'Validez ou Annulez')
    	c=dialog.run()  
    	if c == gtk.RESPONSE_OK:
    		a=1
            else:
                    a=0
    	return a
     
    if validation():
    	print "Vous avez choisi de valider !"
    else:
    	print "Vous avez choisi d'annuler !"
     
    time.sleep(5)

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    Bonjour et merci

    J'obtiens le même résultat : "Vous avez choisi de valider !" s'affiche tout de suite mais la boite se ferme seulement à la fin du sleep 5

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Pourquoi est-ce que tu as un sleep ? Tu peux soit l'enlever, soit le remplacer par un g_timeout_add qui fermera ton dialogue dans un callback

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Pourquoi est-ce que tu as un sleep ? Tu peux soit l'enlever, soit le remplacer par un g_timeout_add qui fermera ton dialogue dans un callback
    Je l'ai juste mis à titre d'exemple, pour illustrer le problème.

    Au départ j'ai été confronté à ce problème en voulant lancer une application après avoir validé.

    Exemple :
    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
    #! /usr/bin/env python
     
    import os, gtk
     
    def validation():  
    	dialog = gtk.MessageDialog(None,0,gtk.MESSAGE_QUESTION,gtk.BUTTONS_OK_CANCEL,'Validez ou Annulez')
    	c=dialog.run()  
    	dialog.destroy()
    	if c == gtk.RESPONSE_OK:
    		return 1
    	return 0
     
    if validation():
    	os.system('xterm -e sleep 5')
    print "c'est fini"
    ici xterm se lance bien dès que j'ai appuyé sur "valider", mais la boite de dialogue reste elle aussi ouverte, en même temps qu'xterm !

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Par défaut
    Citation Envoyé par SysReq Voir le message
    Bonjour et merci

    J'obtiens le même résultat : "Vous avez choisi de valider !" s'affiche tout de suite mais la boite se ferme seulement à la fin du sleep 5
    Oui j'ai oublié la ligne pour fermer la dialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def validation():  
    	dialog = gtk.MessageDialog(None,0,gtk.MESSAGE_QUESTION,gtk.BUTTONS_OK_CANCEL,'Validez ou Annulez')
    	c=dialog.run()  
    	if c == gtk.RESPONSE_OK:
    		a=1
            else:
                   a=0
            c.destroy()
    	return a

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    Citation Envoyé par Arrakis Voir le message
    Oui j'ai oublié la ligne pour fermer la dialog
    Si j'ajoute c.destroy(), j'ai une erreur ('int' object has no attribute 'destroy'), si j'ajoute dialog.destroy(), ça fait la même chose qu'avec mon script d'origine, la boite reste ouverte jusqu'à la fin du sleep

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Je demande parce que c'est un comportement parfaitement normal que gtk+ soit bloqué pendant un sleep. gtk+ fait l'affichage dans sa boucle principale, c'est à dire quand ton programme n'est pas en train d'exécuter une des tes fonctions. Donc si tu mets un sleep, tu bloques dans une de tes fonctions, donc gtk+ ne peut pas rafraîchir l'interface.

Discussions similaires

  1. Changer intitulés des boutons des boites de dialogue
    Par marti dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/08/2006, 13h55
  2. Deplacer des boites de dialogue
    Par yannickrohel dans le forum Windows
    Réponses: 4
    Dernier message: 23/01/2006, 22h17
  3. [MFC]Application basée sur des boites de dialogue
    Par -=Spoon=- dans le forum MFC
    Réponses: 2
    Dernier message: 24/08/2005, 11h55
  4. [ThemeEngine] Comment modifier la langue des boites de dialogue ?
    Par piloumoi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 15/08/2005, 11h35
  5. colorer des boites de dialogue à la validation
    Par shout dans le forum Windows
    Réponses: 20
    Dernier message: 04/08/2004, 11h23

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