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 :

Remplacé un widget par un autre en cours d'utilisation


Sujet :

PyQt Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Remplacé un widget par un autre en cours d'utilisation
    Bonjour,

    Je m'exerce depuis quelques semaines à l'interface graphique sur python via pyqt et je bloque sur le problème suivant.

    Pour simplifier la situation, j'aimerai pouvoir être capable de remplacer un widget par un autre en cours d'utilisation, tout en m'assurant que la position du nouveau widget rester identique à celle de l'ancien.

    J'arrive à réassigner la variable qui représente le widget à afficher, par contre je ne sais pas comment faire "la mise à jour". De plus, j'aimerai éviter de repositionner le nouveau widget, je cherche un vrai remplacement.

    Voilà un exemple de code qui reproduit la manière dont je m'y prends (class issu de QMainWindow, dans mon problème ce sera sûrement un QWidget)

    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
     
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import sys
     
    from PyQt5 import QtWidgets
    from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, QPushButton
     
     
    class HelloWindow(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
     
            #self.setMinimumSize(QSize(640, 480))
            self.setWindowTitle("Hello world")
     
            centralWidget = QWidget(self)
            self.setCentralWidget(centralWidget)
     
            gridLayout = QGridLayout(self)
            centralWidget.setLayout(gridLayout)
     
            self.demo_widget = QLabel("Ceci est un QLabel")
     
            but = QPushButton("Changer de widget.")
            but.clicked.connect(self.change)
     
            gridLayout.addWidget(but)
            gridLayout.addWidget(self.demo_widget)
     
        def change(self):
            print("je change de widget !")
            # j'aimerai éviter d'appeler gridLayout dasn cette fonction
            self.demo_widget = QPushButton("et voilà un QPushButton")
            #self.update()
            #self.show()
            #self.repaint()
     
     
     
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        mainWin = HelloWindow()
        mainWin.show()
        sys.exit(app.exec_())
    merci pour votre aide

  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 dois quand même utiliser le layout pour replacer ton nouveau widget, sinon il ne se placera pas ou tu veux ou il n'apparaîtra pas du tout.

    Comme ceci:
    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
     
    class HelloWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("Hello world")
            centralWidget = QWidget(self)
            self.gridLayout = QGridLayout(centralWidget)
            self.demo_widget = QLabel("Ceci est un QLabel", self)
            self.but = QPushButton("Changer de widget.", self)
            self.but.clicked.connect(self.change)
            self.gridLayout.addWidget(self.but)
            self.gridLayout.addWidget(self.demo_widget)
            self.setCentralWidget(centralWidget)
     
        def change(self):
            print("je change de widget !")
            self.demo_widget.deleteLater()
            self.demo_widget = QPushButton("et voilà un QPushButton", self)
            self.gridLayout.addWidget(self.demo_widget)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Merci pour cette solution, celà me confirme qu'il n'y a pas d'astuce pour ne pas réutiliser gridlayout

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

Discussions similaires

  1. Remplacer un widget par un autre
    Par maroua_mm dans le forum Qt
    Réponses: 8
    Dernier message: 30/07/2009, 13h02
  2. remplacer un jpanel par une autre au cours d'execution du programme
    Par switch1 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 10/02/2009, 13h31
  3. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 12h08
  4. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 14h29
  5. Remplacer un texte par un autre
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 24/11/2005, 00h40

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