Exercice 19
1) - Créer en utilisant l'outil visuel Qt Designer une fenêtre qui demande à l'utilisateur de saisir deux entiers n < m et qui et qui devrait afficher la liste des entiers premiers compris au sens large entre n et m comme le montre la figure suivante:
nommez le fichier primNumbers.ui
NB : A ce stade on vous demande pas de créer l'action du bouton validate
2) - Transformer le fichier primNumbers.ui en un fichier python primNumbers.py via la commande:
1 |
pyuic5 -x primNumbers.ui -o primNumbers.py |
3) - Ecrire une méthode python nommée testprim() qui test si un entier passé en paramètre est premier ou non. Ensuite une méthode nommée listPrim() qui prend deux paramètres entiers n et m et qui renvoie la liste des entiers premiers compris entre ces deux derniers. Complétez l'application en ajoutant un fichier nommé 'main.py' au sein duquel une méthode action() qui réalise l'action du bouton 'btn_validate'
Solution
Question 1 : Code du fichier primNumbers.py crée par Qt Designer
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 |
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(457, 230) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(10, 30, 101, 16)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(10, 60, 101, 16)) self.label_2.setObjectName("label_2") self.lineEdit_n = QtWidgets.QLineEdit(Form) self.lineEdit_n.setGeometry(QtCore.QRect(140, 30, 261, 20)) self.lineEdit_n.setObjectName("lineEdit_n") self.lineEdit_m = QtWidgets.QLineEdit(Form) self.lineEdit_m.setGeometry(QtCore.QRect(140, 60, 261, 20)) self.lineEdit_m.setObjectName("lineEdit_m") self.btn_validate = QtWidgets.QPushButton(Form) self.btn_validate.setGeometry(QtCore.QRect(140, 90, 261, 23)) self.btn_validate.setObjectName("btn_validate") self.lbl_result = QtWidgets.QLabel(Form) self.lbl_result.setGeometry(QtCore.QRect(140, 130, 261, 71)) self.lbl_result.setObjectName("lbl_result") 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_2.setText(_translate("Form", "Enter value of m :")) self.btn_validate.setText(_translate("Form", "Validate")) self.lbl_result.setText(_translate("Form", "List of prime numbers")) |
Question 2 : il suffit de lancer la commande cmd et d'exécuter la commande:
1 |
pyuic5 -x primNumbers.ui -o primNumbers.py |
Question 3 : Code du fichier 'main.py'
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 |
import sys from primNumbers import * from PyQt5.QtWidgets import QApplication, QWidget def testprim(n): # initialize number of divisors divisors = 0 for i in range(2,n): if n%i == 0: divisors = divisors + 1 return divisors == 0 def listPrim(n, m): # initialize the list of prim numbers prim = [] for i in range(m, n): if testprim(i): prim.append(i) return prim # create a button action def action(): # getting the fields values n = int(ui.lineEdit_n.text()) m = int(ui.lineEdit_m.text()) L = listPrim(m, n) ui.lbl_result.setText(str(L)) app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) # connect athe button to action ui.btn_validate.clicked.connect(action) Form.show() sys.exit(app.exec_()) |
Remarque
Les deux fichiers main.py et primNumbers.py doivent être placés sur le même répertoire!
Younes Derfoufi
CRMEF OUJDA