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 :

Mettre à jour l'interface graphique [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 299
    Par défaut Mettre à jour l'interface graphique
    Bonjour,

    voila je veux avoir une structure MVC donc c'est pour cela que j'ai séparé la vue et les évenements.
    Mais le problème, c'est que je sais pas comment récupérer les données après les événements.

    class pour l'interface

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    import controller_view
     
    class View(QWidget):
     
        def __init__(self):
            super(View, self).__init__()
            self.init()
            self.number_msa=0
            self.layout=QGridLayout()
     
        def label_name(self, number_msa):
            label=QLabel(self)
            label.setText("MSA "+str(number_msa))
            return label
     
        def button_file(self):
            button = QPushButton('file', self)
            button.setFocusPolicy(Qt.NoFocus)
            return button
     
        def file_name(self):
            filename=QLineEdit(self)
            return filename
     
        def aligt(self):
            algt=QTextEdit(self)
            return algt
     
        def button_remove(self):
            button = QPushButton('remove', self)
            return button
     
        def group_radio(self):
            group=QGroupBox("format", self)
            clustal=QRadioButton("clustal")
            fasta=QRadioButton("fasta")
            msf=QRadioButton("msf")
            fasta.setChecked(1)
            box=QHBoxLayout()
            box.addWidget(fasta)
            box.addWidget(clustal)
            box.addWidget(msf)
            group.setLayout(box)
            return group
     
        def button_submit(self):
            button = QPushButton('submit', self)
            return button
     
        def button_plus(self):
            button = QPushButton('+algt',self)
            return button
     
        def msa_1(self):
            label=self.label_name(1)
            self.layout.addWidget(label, 0, 0)
            button_file=self.button_file()
            self.layout.addWidget(button_file, 1, 0)
            file_name=self.file_name()
            self.layout.addWidget(file_name, 1, 1)
            self.layout.addWidget(self.button_remove(), 1, 2)
            self.layout.addWidget(self.aligt(), 2, 1)
            self.layout.addWidget(self.group_radio(), 3, 0, 1, 2)
            self.connect(button_file,SIGNAL('clicked()'),self.control.choose_file)
            #file_name.setText(self.control.get_filename())
     
        def msa_2(self):
            self.layout.addWidget(self.label_name(2), 4, 0)
            button_file=self.button_file()
            self.layout.addWidget(button_file, 5, 0)
            self.layout.addWidget(self.file_name(), 5, 1)
            self.layout.addWidget(self.button_remove(), 5, 2)
            self.layout.addWidget(self.aligt(), 6, 1)
            self.layout.addWidget(self.group_radio(), 7, 0, 1, 2)
            self.connect(button_file,SIGNAL('clicked()'),self.control.choose_file)
     
     
        def init(self):
            self.control = controller_view.Controller(self)
            self.layout=QGridLayout()
            self.msa_1()
            self.msa_2()
            self.layout.addWidget(self.button_submit(), 7, 3)
            self.setWindowTitle('MsaCompare')
            self.setLayout(self.layout)
     
     
    if __name__ == '__main__':
        app=QApplication(sys.argv)
        vw=View()
        vw.show()
        app.exec_()
    class pour les évenements :
    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
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    from view2 import *
    import os
     
    class Controller(QWidget):
        "Realize the event and action of the window view"
        def __init__(self, QWidget):
            super(Controller, self).__init__()
            self.filename=""
     
        def get_filename(self):
            print "oui"
            return self.filename
     
        def choose_file(self):
            filename = QFileDialog.getOpenFileName(self, 'Open file', os.getenv("HOME"))
            fname = open(filename)
            self.filename=filename
    en faite j'aimerai récupéré le self.filename de la class controller et l'afficher dans le file_name de l'interface.
    mais le problème c'est que quand j'appel la fonction get_filename() elle est apelé avant que je puisse cliqué sur le bouton file. Ce que je comprends. Mais comment faire alors?

    j'espère avoir été clair.

    merci
    alaninho

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Bonsoir,

    Je ne veux pas te décourager, mais tu subdivises un peu trop ton code. Beaucoup trop même, j'ai failli abandonner la lecture.

    Nul besoin d'instancier les widgets dans des fonctions séparées.

    Cet embrouillamini explique peut-être que pourquoi tu ne vois pas le problème.

    La connexion de ton bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           self.connect(button_file,SIGNAL('clicked()'),self.control.choose_file)
    appelle ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        def choose_file(self):
            filename = QFileDialog.getOpenFileName(self, 'Open file', os.getenv("HOME"))
            fname = open(filename)
            self.filename=filename
    Je suppose que 'fname = open(filename)' est un illegal (sans papier, etc), mais il n'y a rien pour récupérer ce nom de fichier.

    sauf ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #file_name.setText(self.control.get_filename())
    mais tu l'as commenté et de toutes façons tu n'en gardes pas de référence viable en dehors de la fonction.

    Simplifies ton code, ton problème n'est que là.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 299
    Par défaut
    Merci, je vais suivre ton conseil, Je dois mettre tout (les boutons, ...) dans une methode def msa(self) par example?

    Alanino

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Oui par exemple, si tu ne veux pas les instancier dès le lancement de ton programme.
    Mais tu peux aussi le mettre dans ta fonction __init__.

    Personnellement moi je mets dans cette fonction tout la base graphique commune à mon applic. Puis je crée des fonctions selon mes besoins...

    Voici grosso-modo ce que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def __init__(self):
        #Base commune.
        #Par exemple écran d'une application de gestion de client
     
    def create(self):
        #Widgets nécessaire à créer une fiche client...
     
    def read(self):
        #widget nécessaire à lire une fiche client...
    Bon courage.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. [XL-2003] Mettre à jour series dans graphique
    Par Tintou dans le forum Excel
    Réponses: 5
    Dernier message: 11/11/2009, 16h14
  2. comment mettre à jour un sousformulaire-graphique?
    Par carlostropico dans le forum IHM
    Réponses: 2
    Dernier message: 14/10/2008, 12h01
  3. Mettre à jour mon interface durant de longs calculs
    Par Rodrigue dans le forum C++/CLI
    Réponses: 7
    Dernier message: 16/02/2008, 11h26
  4. Mettre à jour les liens des graphiques d'Excel dans Powerpoint
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 15h17
  5. mis à jour interface graphique
    Par fenec dans le forum MFC
    Réponses: 2
    Dernier message: 23/04/2006, 16h26

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