Exercice 10
Question 1: Créez un fichier nommée "liste-premiers.ui" en utilisant l'éditeur graphiqueQt Designer. Ce fichier doit générer une fenêtre invitant l'utilisateur à saisir un nombre entier n. Lorsque le bouton est activé, la fenêtre doit afficher la liste des nombres premiers p <= ndans le label "label_result", tel qu'illustré ci-dessous :
Il est important de noter qu'à cette étape, la création de l'action associée au bouton n'est pas requise.
Question 2: Après avoir créé le fichier "liste-premiers.ui", effectuez sa conversion en un fichier Python nommé "liste-premiers.py" en utilisant la commande suivante :
1 |
pyuic5 -x liste-premiers.ui -o liste-premiers.py |
Question 3: Au sein de la classe Ui_Form générée par Qt Designer, établissez une méthode baptisée "list_prim()" permettant de générer la liste des entiers premiers p <= n.
Question 4: Implémentez une méthode nommée "action()" et associez-la à l'événement de clic du widget QPushButton. Cette méthode doit afficher le résultat de la liste des entiers premiers p <= n sur le QLabel "label_result".
Solution
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 |
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(402, 140) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(10, 10, 121, 16)) self.label.setObjectName("label") self.lineEdit_N = QtWidgets.QLineEdit(Form) self.lineEdit_N.setGeometry(QtCore.QRect(140, 10, 241, 20)) self.lineEdit_N.setObjectName("lineEdit_N") self.label_result = QtWidgets.QLabel(Form) self.label_result.setGeometry(QtCore.QRect(20, 90, 351, 20)) self.label_result.setObjectName("label_result") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(140, 50, 241, 23)) self.pushButton.setObjectName("pushButton") # Associate the action with the button self.pushButton.clicked.connect(self.action) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "Enter Value Of N : ")) self.label_result.setText(_translate("Form", "Label Result")) self.pushButton.setText(_translate("Form", "Validate")) # Method to check if given number is prim def is_prime(self, num): if num < 2: return False for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True # method that generates the list of prime numbers def list_prim(self, n): primes = [str(i) for i in range(n + 1) if self.is_prime(i)] return ', '.join(primes) # method that performs the action def action(self): # Récupérer la valeur du QLineEdit n_text = self.lineEdit_N.text() try: # Convertir le texte en un nombre entier n = int(n_text) # Générer la liste des nombres premiers result = "List prims : " + self.list_prim(n) # Afficher le résultat dans le QLabel self.label_result.setText(result) except ValueError: # En cas d'erreur de conversion self.label_result.setText("Veuillez saisir un nombre entier valide.") if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA