Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de resize event

    16 janvier 2019 à 16:19:45

    Bonjour,

    Pour un tp de python on doit faire en sorte que quand on resize la fenêtre, le graphique (label lb et pixmap px) prennent la totalité de la fenêtre et je n'y arrive pas.

    J'ai tenté un self.lb.setFixedWidth(self.width())  mais quand je lance le programme il s'agrandit en boucle

    je laisse le code intégral

    Merci d'avance

    #TP1 - EXERCICE 3: Apparition des premières fenêtres....
    
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    
    class MyMainWindow(QWidget):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent=parent)
            self.initUI()
    
        def initUI(self):
            self.setGeometry(300,300,500,300)
            self.setWindowTitle('My Main Window')
    
            # label
            self.label = QLabel("Saisir un nombre et cliquer") #label vide pour affichage du print de DisplayMessage
    
            # champ de texte 1 ligne
            self.champ = QLineEdit()
            self.champ.setValidator(QIntValidator())
    
            # button
            self.bu = QPushButton("Calcule...")
            #self.bu.clicked.connect(QApplication.instance().quit)
            self.bu.clicked.connect(self.DisplayMessage) #appel la fonction DisplayMessage
    
            # champ de texte multiligne
            self.champMulti = QPlainTextEdit()
    
            # affichage du graphique
            self.lb = QLabel()
            self.lb.setFixedWidth(self.width())
            self.lb.setFixedHeight(300)
            self.lb.setFrameShape(QFrame.Panel) # pour dessiner un contour autour de la zone
            self.px = QPixmap(self.width(),300)            
    
            layout = QVBoxLayout(self)
            layout.addWidget(self.label)
            layout.addWidget(self.champ)
            layout.addWidget(self.bu)
            layout.addWidget(self.champMulti)
            layout.addWidget(self.lb)
            self.setLayout(layout)
    
        # affiche message a la fermeture
        def closeEvent(self, event):
            reponse = QMessageBox.question(self, 'Message',
                "Souhaitez vous vraiment quitter?", QMessageBox.Yes, QMessageBox.No)
            if reponse == QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
    
        # Redimentionnement de l'affichage graphique
        def resizeEvent(self, event):
            wc = self.width() # recupere la largeur
            hc = self.height() # recupere la longueur
            self.lb.setFixedWidth(self.width())
            print(self.lb.width())
            print('width' + str(wc) + " height" + str(hc))
    
        # ecrit dans la fenetre le resultat de Syracuse
        def DisplayMessage(self):
            values = [] # values => tableau vide
            self.champMulti.clear() # vide le champ multiligne
            val = self.champ.text()
    
            if not val:
                self.champMulti.appendPlainText("veuillez saisir un chiffre avant de lancer le calcul...")
            else:
                n = int(val)
                if(n > 1):
                    maxi = n
                    count = 1
                
                    while (n > 1):
                        if (n % 2 == 0):
                            n = n / 2
                        else:
                            n = 3 * n + 1 #Enlever * pour eviter la boucle infini pour n = 5
                        self.champMulti.appendPlainText(str(n)) #} ajoute n au champ multiligne
                        values.append(n) #Ajoute n à la fin du tableau
                        count = count + 1
    
                    if (n > maxi):
                        maxi = n
                self.champMulti.appendPlainText("Nombre de termes dans la suite: " + str(count))
                self.champMulti.appendPlainText("Valeur max de la suite: " + str(maxi))
    
                self.px.fill(QColor(200, 200, 200)) # RAZ de la zone graphique, elle est remplie avec une couleur RGB de votre choix
                painter = QPainter(self.px) # récupération de l’objet QPainter de la pixmap
                for i in range(0, len(values)): # parcours dans les termes de la suite
                    h = max(values) # hauteur du point ou du trait
                    # calcul de la mise à l’échelle
                    x = i*self.width()/(len(values)-1) # compteur * longueur / nb element
                    y = 300 - ((300/h)*values[i]) # hauteur - (hauteur / element max) * element
                    painter.drawPoint(x,y) # tracé d’un point
                    if i != 0: # Si il y a un point avant
                        x1 = x
                        x2 = (i-1)*self.width()/(len(values)-1) # valeur precedente
                        y1 = y
                        y2 = 300 - ((300/h)*values[i-1]) # valeur precedente
                        painter.drawLine(x1,y1,x2,y2) # ou bien tracé d’un trait
                self.lb.setPixmap(self.px) # la zone graphique est affecté au widget label
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = MyMainWindow()
        w.show()
        app.exec_()
    • Partager sur Facebook
    • Partager sur Twitter

    probleme de resize event

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown