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 :

Sééparer vue et événement comme en MVC [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 Sééparer vue et événement comme en MVC
    Bonjour les amis,

    J'aimerai séparé la vue des évenements, mais le problème c'est que je ne vois pas ensuite, comment je peux mettre à jour l'interface.

    Ici par example, je dois chargé un fichier en cliquant sur le bouton "button_file", sa appel la fonction "choose_file" dans la class "controller" et j'aimerai mettre le nom du chemin dans "filename" qui est un QLineText(). Je ne vois pas du tout comment faire.

    ceci est ma classe view

    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
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    import controller_view
    import msa_view
    import sys
     
    class View(QWidget):
     
        def __init__(self):
            super(View, self).__init__()
            self.init()
            self.number_msa=0
            self.layout=QGridLayout()
     
        def button_submit(self):
            button = QPushButton('submit', self)
            return button
     
        def button_plus(self):
            button = QPushButton('+algt',self)
            return button
     
        def display_msa(self, number_msa):
            widget=QWidget()
            layout= QGridLayout()
            label=QLabel(self)
            label.setText("MSA "+str(number_msa))
            button_file = QPushButton('file', self)
            self.connect(button_file, SIGNAL('clicked()'), self.control.choose_file)
            filename=QLineEdit(self)
            algt=QTextEdit(self)
            button_remove = QPushButton('remove', 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)
            layout.addWidget(label, 0,0)
            layout.addWidget(button_file, 1,0)
            layout.addWidget(filename, 1,1)
            layout.addWidget(button_remove, 1,2)
            layout.addWidget(algt, 2,1)
            layout.addWidget(group, 3,0,1,2)
            widget.setLayout(layout)
            return widget
     
        def init(self):
            self.control = controller_view.Controller(self)
            self.layout=QVBoxLayout()
            self.layout.addWidget(self.display_msa(1))
            self.layout.addWidget(self.display_msa(2))
            self.layout.addWidget(self.button_submit())
            self.layout.addWidget(self.button_plus())
            self.setWindowTitle('MsaCompare')
            self.setLayout(self.layout)
     
     
    if __name__ == '__main__':
        app=QApplication(sys.argv)
        vw=View()
        vw.show()
        app.exec_()
    Dans la class controller pour l'instant j'ai juste la fonction choose_file et qui écrit le nom du chemin car rien marche.

    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
    Salut,

    Je vais encore dire que tu t'embrouille dans ton code , regardes si c'est pas mieux comme ca:

    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
     
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    #from controller_view import Controller
    #import msa_view
    import sys
     
    class View(object):
     
        def __init__(self, MainWindow):
            MainWindow.setWindowTitle('MsaCompare')
            self.centralwidget = QWidget(MainWindow)
            self.gridLayout = QGridLayout(self.centralwidget)
            self.number_msa=0
     
            #self.control = Controller(self)
     
            self.layout=QVBoxLayout()
            self.layout.addWidget(self.display_msa(1))
            self.layout.addWidget(self.display_msa(2))
            self.button_submit = QPushButton('submit', self.centralwidget)
            self.layout.addWidget(self.button_submit)
            self.button_plus = QPushButton('+algt', self.centralwidget)
            self.layout.addWidget(self.button_plus)
            self.gridLayout.addLayout(self.layout, 0, 0, 1, 1)
     
            MainWindow.setCentralWidget(self.centralwidget)
            MainWindow.show()
     
        def display_msa(self, number_msa):
            widget=QWidget()
            layout= QGridLayout(widget)
            label=QLabel(widget)
            label.setText("MSA "+str(number_msa))
            button_file = QPushButton('file', widget)
            #button_file.clicked.connect(self.control.choose_file)
            filename=QLineEdit(widget)
            algt=QTextEdit(widget)
            button_remove = QPushButton('remove', widget)
            group=QGroupBox("format", widget)
            clustal=QRadioButton("clustal", widget)
            fasta=QRadioButton("fasta", widget)
            msf=QRadioButton("msf", widget)
            fasta.setChecked(1)
            box=QHBoxLayout()
            box.addWidget(fasta)
            box.addWidget(clustal)
            box.addWidget(msf)
            group.setLayout(box)
            layout.addWidget(label, 0,0)
            layout.addWidget(button_file, 1,0)
            layout.addWidget(filename, 1,1)
            layout.addWidget(button_remove, 1,2)
            layout.addWidget(algt, 2,1)
            layout.addWidget(group, 3,0,1,2)
            #widget.setLayout(layout)
            return widget
     
     
     
     
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        MainWindow = QMainWindow()
        vw = View(MainWindow)
        sys.exit(app.exec_())
    J'ai commenté ce que je ne peux pas faire fonctionner chez moi.

    J'ai aussi modifié la connexion du bouton.

    Au fait ça sert à quoi ?
    J'espère n'avoir pas participé à un projet terroriste ...

  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, c'est pour mon stage de bioinfo, je dois réaliser un programme qui compare des Alignements Multiple de Séquense.

    Alaninho

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

Discussions similaires

  1. Patron MVC : bien séparer la vue.
    Par CompuTux dans le forum Langage
    Réponses: 10
    Dernier message: 01/02/2012, 07h30
  2. Réponses: 13
    Dernier message: 03/03/2010, 23h30
  3. [MVC/Organisation] Séparer le Modèle/Métier de la Vue/Controller
    Par Wookai dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 25/06/2007, 11h03
  4. [Conception] MVC - Déclarer l'écouteur d'evenement dans la vue.
    Par etiennegaloup dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2006, 18h50
  5. [SWT][MVC] Comment séparer métier et présentation
    Par pyorg dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 27/08/2004, 18h21

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