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

PyQt Python Discussion :

Envoyer une variable d'une fenêtre à une autre


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 57
    Points
    57
    Par défaut Envoyer une variable d'une fenêtre à une autre
    Bonjour,

    A l'aide de cette documentation http://pyqt.developpez.com/tutoriels/trucs-et-astuces/deuxieme-fenetre-et-recuperer-valeur/ et de cette discussion http://www.developpez.net/forums/d15...xieme-fenetre/ j'ai réussi à ouvrir une seconde fenêtre créée avec qtDesigner.

    Je souhaiterai maintenant qu'une variable soit envoyé de ma seconde fenêtre vers ma première fenêtre (l'inverse de ce tutoriel). Pour cela j'ai donc fait

    Depuis mon fichier main, j'ouvre la seconde comme suit (executé depuis un bouton)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     def open_add_asa_form(self):
    		#creation de l'objet
    		self.fen_add_asa = add_asa() 
    		#envoi du signal
    		self.fen_add_asa.show() 
    		#fenetre modale
    		self.fen_add_asa.setWindowModality(QtCore.Qt.ApplicationModal) 
    		#ouverture de la fenetre
    		self.dlg.emit(SIGNAL("modifier(PyQt_PyObject)"),"test")
    J'ai essayé de placer cette ligne avant ou après l'ouverture de la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.dlg.emit(SIGNAL("modifier(PyQt_PyObject)"),"test")
    Et ci dessous le code de ma deuxième fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def __init__(self, parent=None):
            super(add_asa, self).__init__(parent)
            self.setWindowTitle(u"configuration asa")
     
    	#connexion avec la fenetre main
            self.fen_main=perimetreAsaDialog()
            self.connect(self.fen_main, SIGNAL("modifier(PyQt_PyObject)"), self.modifier)
     
        def modifier(self,x):
    		print "modification"+x
    J'ai bien conscience qu'il y a un truc qui n'est pas logique, le "emit" étant exécuté juste après que la seconde fenêtre soit ouverte. Comment puis je attendre que la fenêtre soit chargée pour exécuter mon emit?

    Vous remerciant par avance.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par renardchan Voir le message
    Je souhaiterai maintenant qu'une variable soit envoyé de ma seconde fenêtre vers ma première fenêtre (l'inverse de ce tutoriel).
    Moi, j'ai compris le contraire: contrairement au tuto, tu veux envoyer un message de la 1ère fenêtre à la seconde au moment de son affichage.

    Si c'est bien ça, dans ta fonction open_add_asa_form qui lance la 2ème fenêtre, essaie de placer la ligne suivante avant le emit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtCore.QCoreApplication.processEvents()
    Ce qui donnerait (avec d'autres corrections):

    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
     def open_add_asa_form(self):
     
    		#crée la fenêtre
    		self.fen_add_asa = add_asa() 
     
    		#met la fenêtre en mode modal
    		self.fen_add_asa.setWindowModality(QtCore.Qt.ApplicationModal) 
     
    		# lance l'affichage de la fenêtre
    		self.fen_add_asa.show() 
     
    		# force l'affichage
    		QtCore.QCoreApplication.processEvents()
     
    		# envoie un message à la fenêtre affichée
    		self.dlg.emit(SIGNAL("modifier(PyQt_PyObject)"),"test")
    A noter que, même si ça marche, c'est plutôt inhabituel: quand on lance une nouvelle fenêtre, on peut lui passer ce qu'on veut comme argument, ou on peut appeler tout de suite après une de ses méthodes avec ce même argument.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Beaucoup de choses à dire sur ton code.

    - Si c'est add_asa le nom de la classe dialog il faudrait une majuscule et utiliser la "camel case" >> AddAsa.

    - Tu utilises des signaux "old style", à proscrire.

    - Dans cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		self.dlg.emit(SIGNAL("modifier(PyQt_PyObject)"),"test")
    c'est quoi self.dlg ? Ça sent la confusion.

    - Dans le dialog self.fen_main=perimetreAsaDialog() c'est un objet importé ? que vient-il faire là ?

    Et puis enfin qu'est censé faire le signal ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    Moi, j'ai compris le contraire: contrairement au tuto, tu veux envoyer un message de la 1ère fenêtre à la seconde au moment de son affichage.
    Oui c'est bien de la 1ère à la 2ème désolé.

    A noter que, même si ça marche, c'est plutôt inhabituel: quand on lance une nouvelle fenêtre, on peut lui passer ce qu'on veut comme argument, ou on peut appeler tout de suite après une de ses méthodes avec ce même argument.
    Je n'étais pas sûr que cela soit possible (je débute en python) et je n'avais pas bien orienté mes recherches. Je n'avais donc rien trouvé à ce sujet. Suite à ta réponse j'ai relancé mes recherches et trouvé la solution. Merci de m'avoir aiguillé.

    J'ai donc procédé comme tel:
    Fichier main, appel de la 2eme fenêtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def open_add_asa_form(self):
    		infos="test"
    		#creation de l'objet
    		self.fen_add_asa = add_asa(infos) 
    		#fenetre modale
    		self.fen_add_asa.setWindowModality(QtCore.Qt.ApplicationModal)
    		#envoi du signal
    		self.fen_add_asa.show()
    Utilisation de la variable dans la 2eme fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def __init__(self,infos,parent=None):
            super(add_asa, self).__init__(parent)
            print infos

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/04/2015, 15h46
  2. Contenu d'une variable devenant lui même une variable
    Par Copyright83 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 14/11/2012, 17h24
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. [Smarty] Récuper une variable php à partir d'une variable Smarty
    Par SPKlls dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/04/2008, 17h40
  5. [Free Pascal] [2.2] Impossible d'assigner une variable de type T à une variable de type T
    Par Hibou57 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/10/2007, 12h31

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