Exercice 7
Vous êtes prié(e) de générer un fichier intitulé diviseurs-communs.ui à l'aide de l'éditeur visuel Qt Designer lequel présente une fenêtre sollicitant à l'utilisateur d'entrer deux nombres entiers, m et n. Ce fichier doit également afficher la liste des diviseurs communs à ces deux entiers, comme illustré dans l'image ci-dessous (sans implémenter l'action du bouton de commande !) :
1) - Transformez ce fichier en un script Python baptisé diviseurs-communs.py en utilisant la commande suivante:
1 |
pyuic5 -x diviseurs-communs.ui -o diviseurs-communs.py |
2) - Créez et associez au bouton de commande une méthode nommée action() qui détermine la liste des diviseurs de m et n, puis l'affiche sur le 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 76 77 78 79 80 81 82 83 84 85 86 87 |
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_DiviseursCommuns(object): def setupUi(self, DiviseursCommuns): DiviseursCommuns.setObjectName("DiviseursCommuns") DiviseursCommuns.resize(445, 197) self.label = QtWidgets.QLabel(DiviseursCommuns) self.label.setGeometry(QtCore.QRect(100, 10, 371, 16)) font = QtGui.QFont() font.setPointSize(14) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName("label") self.label_Enter_n = QtWidgets.QLabel(DiviseursCommuns) self.label_Enter_n.setGeometry(QtCore.QRect(10, 50, 141, 16)) font = QtGui.QFont() font.setPointSize(12) self.label_Enter_n.setFont(font) self.label_Enter_n.setObjectName("label_Enter_n") self.label_enter_m = QtWidgets.QLabel(DiviseursCommuns) self.label_enter_m.setGeometry(QtCore.QRect(10, 80, 141, 16)) font = QtGui.QFont() font.setPointSize(12) self.label_enter_m.setFont(font) self.label_enter_m.setObjectName("label_enter_m") self.result = QtWidgets.QLabel(DiviseursCommuns) self.result.setGeometry(QtCore.QRect(10, 150, 431, 16)) font = QtGui.QFont() font.setPointSize(12) self.result.setFont(font) self.result.setObjectName("result") self.lineEdit_n = QtWidgets.QLineEdit(DiviseursCommuns) self.lineEdit_n.setGeometry(QtCore.QRect(160, 50, 171, 20)) self.lineEdit_n.setObjectName("lineEdit_n") self.lineEdit_m = QtWidgets.QLineEdit(DiviseursCommuns) self.lineEdit_m.setGeometry(QtCore.QRect(160, 80, 171, 20)) self.lineEdit_m.setObjectName("lineEdit_m") self.pushButton = QtWidgets.QPushButton(DiviseursCommuns) self.pushButton.setGeometry(QtCore.QRect(160, 110, 171, 23)) self.pushButton.setObjectName("pushButton") self.retranslateUi(DiviseursCommuns) QtCore.QMetaObject.connectSlotsByName(DiviseursCommuns) def retranslateUi(self, DiviseursCommuns): _translate = QtCore.QCoreApplication.translate DiviseursCommuns.setWindowTitle(_translate("DiviseursCommuns", "Form")) self.label.setText(_translate("DiviseursCommuns", "List of common divisors")) self.label_Enter_n.setText(_translate("DiviseursCommuns", "Entrer value of n :")) self.label_enter_m.setText(_translate("DiviseursCommuns", "Entrer value of m :")) self.result.setText(_translate("DiviseursCommuns", "Result : ")) self.pushButton.setText(_translate("DiviseursCommuns", "Compute")) if __name__ == "__main__": import sys def action(): # récupérer les valeurs de m et de n n = int(ui.lineEdit_n.text()) m = int(ui.lineEdit_n.text()) # Trouver les diviseurs de n diviseurs_n = [i for i in range(1, n + 1) if n%i == 0] # Trouver les diviseurs de m diviseurs_m = [i for i in range(1, m + 1) if m % i == 0] # Trouver les diviseurs communs diviseurs_communs = [diviseur for diviseur in diviseurs_n if diviseur in diviseurs_m] # Afficher les diviseurs communs sur le label Result ui.result.setText("Diviseurs communs : " + str(diviseurs_communs)) # Création d'un objet d'instance app = QtWidgets.QApplication(sys.argv) DiviseursCommuns = QtWidgets.QWidget() ui = Ui_DiviseursCommuns() ui.setupUi(DiviseursCommuns) # associer l'action au bouton de commande ui.pushButton.clicked.connect(action) DiviseursCommuns.show() sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA