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 :

Disparition inquiétante de widgets d'un QFormLayout [QtGui]


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Disparition inquiétante de widgets d'un QFormLayout
    Bonjour a tous,
    Je n'ai pas trouvé de sujet correspondant sur le forum alors je viens vers vous.
    J'apprends PyQt depuis peu,après un passage a TKinter, et en testant je me retrouve face a ce probleme sans en comprendre le pourquoi du comment.
    J'ai crée un formulaire qui est censé récupérer des saisies utilisateurs dans une liste afin d'un traitement ultérieur. Pour les récupérer j'utilise un bouton qui renvoie vers une méthode.Si lors de la 1ere utilisation tout se passe bien, la liste est valorisée,quand j'appuie a nouveau sur le dit bouton, alors impossible de récupérer les champs du formulaire pourtant affichés a l'écran. En testant un peu je me suis aperçu qu'en fait, le QFormLayout() était vide au 2ème appel depuis le bouton. J'imagine que c'est un problème de rafraichissement mais je n'arrive pas a trouver comment le faire.J'ai utilisé update() sur les Layout mais sans succès.
    J'avoue ma noobitude en la matière,j'espère que quelqu'un a eu ce souci pour m'aider. Je vous passe le petit morceau de code qui démontre la chose :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    # -*- coding:Utf-8 -*-
    import sys,os
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
     
    class Interface(QWidget):
     
        def __init__(self):
            super(interface,self).__init_()
            self.fenetre=QWidget()
            self.fenetre.setGeometry(50,50,400,200)
            self.form=QFormLayout()
            self.fenetre.setLayout(self.form)
            self.demarrage()
            self.fenetre.show()
     
     
        def demarrage(self):
            self.ltext1=QLineEdit()
            self.ltext2=QLineEdit()
            self.ltext3=QLineEdit()
            self.bouton1=QPushButton("Validez")
            self.bouton1.clicked.connect(self.bouton_clicked)
            self.form.addRow("entree1",self.ltext1)
            self.form.addRow("entree2",self.ltext2)
            self.form.addRow("entree3",self.ltext3)
            self.form.addRow(self.bouton1)
     
        def bouton_clicked(self):
            self.lst_saisie=[]
            while self.form.count():
                 self.item=self.form.takeAt(0)
                 if type(self.item.widget)==QLineEdit:
                      self.lst_saisie.append(str(self.item.widget().text()))
            print self.lst_saisie
     
     
    app=QApplication(sys.argv)
    fenetre=Interface()
    app.exec_()
    Cordialement

  2. #2
    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,

    Tu montres un code qui se plante au démarrage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            super(interface,self).__init_()
    il faut une majuscule à Interface et il manque le quatrième soulignement à __init__

    Tu utilises self.form.takeAt(0) ce qui a pour effet de retirer l'item du layout.
    http://pyqt.sourceforge.net/Docs/PyQt4/qformlayout.html

    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def bouton_clicked(self):
            self.lst_saisie=[]
            for i in range(self.form.count()):
                if isinstance(self.form.itemAt(i).widget(), QLineEdit):
                    self.lst_saisie.append(str(self.form.itemAt(i).widget().text()))
            print self.lst_saisie
    En plus ta classe hérite inutilement de QWidget, mais ceci est une autre histoire.

  3. #3
    Candidat au Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup VinsS, pour votre analyse.

    Effectivement il y a des fautes que j'ai loupées car j'ai fait un copier-coller et ça m'a rajouté tout un tas de caractères dans le script.Ma relecture n'a pas été efficace.
    Je connaissais itemAt() mais je n'avais pas compris la subtilité avec itemtakeAt(). C'est pas évident, tout est en anglais et on peut passer a côté de beaucoup de choses. Pour le reste effectivement je dois surcharger^^ car je suis en phase d'apprentissage et je ne suis pas du métier.

    Merci beaucoup pour votre aide, ça me permet d'avancer plus vite.
    Bon week end

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Disparition de widgets
    Par nabot dans le forum Tkinter
    Réponses: 11
    Dernier message: 08/03/2009, 13h45
  2. disparition activeX calendrier
    Par djool dans le forum Access
    Réponses: 10
    Dernier message: 26/01/2005, 12h31
  3. [GDI] Disparition d'un Bouton...
    Par Strider dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 08h50
  4. [SWT]Eclipse Java : swt.widgets.Table
    Par watson dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 01/10/2003, 09h07
  5. Disparition d'un objet
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 14/07/2003, 15h44

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