Exercice 4
Concevoir une application graphique à l'aide de la bibliothèque PyQt5 qui affiche à l'utilisateur une fenêtre lui demandant de saisir son nombre entier N sur une zone de texte et en cliquant sur le bouton validate, l'application lui affiche la liste des diviseurs de N sur la deuxième zone de texte comme le montre la figure ci-dessous:
- - Le premier champ de saisie sera nommé value_of_N
- - Le deuxième champ de saisie sera nommé divisors_of_N
- - le bouton qui valide l'action sera nommé btn_validate
1) - Créer un répertoire nommé TP-PyQt
2) - Au sein du répertoire TP-PyQt, enregistrer le fichier créer par Qt Designer sous le nom de app.ui
2) - Coder l'application de deux façons différentes:
- La première sur fichier main1.py en chargeant directement le fichier app.ui à l'aide du module load ui:
- La deuxième sur un fichier main2.py à l'aide de la commande pyuic5:
Solution
Première méthode en utilisant le module loadUi
- A l'aide de Qt Designer, on crée facilement l'interface graphique
- puis on enregistre le fichier sur le répertoire TP-Python sous le nom de app.ui
- on crée ensuite au sein du même répertoire un fichier python nommé main1.py
- on crée au sein de main1.py une méthode nommée listDivisors() permettant de lister les diviseurs de l'entier N
- on crée ensuite une méthode nommée validate() qui valide l'action du bouton
code du fichier main1.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 |
# coding: utf-8 import sys from PyQt5.QtWidgets import QApplication from PyQt5 import uic # list of divisor of N def listDivisors(N): # initialisation de la liste des diviseurs de N list_div_N = [] for k in range(1 , N+1): # on teste si k est un diviseur de N if N % k == 0: list_div_N.append(k) return list_div_N # méthode qui valide l'action def validate(): N = int(ui.value_of_N.text()) ui.divisors_of_N.setText(str(listDivisors(N)) ) # création d'une application PyQt5 app = QApplication(sys.argv) # on charge le fichier app.ui ui = uic.loadUi('app.ui') # on associe la méthode validate au bouton de commande validate ui.btn_validate.clicked.connect(validate) ui.show() app.exec_() |
Deuxième méthode en utilisant la commande pyuic5
Lancer la commande cmd et naviguer à l'aide de la commande cd (change directory) jusqu'au répertoire TP-PyQt et exécuter la commande:
1 |
pyuic5 -x app.ui -o app.py |
A ce moment là on constate qu'il y a création d'un fichier python nommé: app.py
code du fichier app.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 40 41 42 43 44 45 46 47 48 49 50 |
#coding: utf-8 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(514, 209) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(10, 30, 111, 16)) font = QtGui.QFont() font.setPointSize(14) self.label.setFont(font) self.label.setObjectName("label") self.value_of_N = QtWidgets.QLineEdit(Form) self.value_of_N.setGeometry(QtCore.QRect(150, 20, 311, 31)) font = QtGui.QFont() font.setPointSize(12) self.value_of_N.setFont(font) self.value_of_N.setObjectName("value_of_N") self.lblresult = QtWidgets.QLabel(Form) self.lblresult.setGeometry(QtCore.QRect(10, 80, 131, 31)) font = QtGui.QFont() font.setPointSize(14) font.setBold(False) font.setWeight(50) self.lblresult.setFont(font) self.lblresult.setObjectName("lblresult") self.divisors_of_N = QtWidgets.QLineEdit(Form) self.divisors_of_N.setGeometry(QtCore.QRect(150, 80, 311, 31)) font = QtGui.QFont() font.setPointSize(12) self.divisors_of_N.setFont(font) self.divisors_of_N.setObjectName("divisors_of_N") self.btn_validate = QtWidgets.QPushButton(Form) self.btn_validate.setGeometry(QtCore.QRect(150, 132, 311, 31)) font = QtGui.QFont() font.setPointSize(12) self.btn_validate.setFont(font) self.btn_validate.setObjectName("btn_validate") 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", "Value Of N")) self.lblresult.setText(_translate("Form", "Divisors of N ...")) self.btn_validate.setText(_translate("Form", "Validate")) |
Au sein du répertoire TP-PyQt on crée un fichier python nommé main2.py
code du fichier main2.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 |
# coding: utf-8 import sys from PyQt5.QtWidgets import QApplication from app import * # list of divisor of N def listDivisors(N): # initialisation de la liste des diviseurs de N list_div_N = [] for k in range(1 , N+1): # on teste si k est un diviseur de N if N % k == 0: list_div_N.append(k) return list_div_N # méthode qui valide l'action def validate(): N = int(ui.value_of_N.text()) ui.divisors_of_N.setText(str(listDivisors(N))) # création d'une application PyQt5 app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() # création d'un objet d'instance ui = Ui_Form() ui.setupUi(Form) # connecter le bouton à la méthode validate ui.btn_validate.clicked.connect(validate) Form.show() sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA
1 thought on “Solution Exercice 4: liste des diviseurs d'un entier avec PyQt”