الرئيسية › الدروس › الواجهات الرسومية بـ Qt
الواجهات الرسومية Qt Designer وPyQt5: الباك التطبيقي
نافذة مرسومة بـ Qt Designer، وبرنامج Python يتفاعل مع الكليكات: قلب الباك التطبيقي.
دروس هذا الفصل
- أول نافذة متاعي
- الحساب ومراقبة الإدخال
- أزرار radio، cases à cocher، وقوائم منسدلة
- تطليع قائمة نتائج
الدرس 19.1 : أول نافذة متاعي
الـ interface graphique تعوّض input() و print() بـ نافذة: خانات نص باش نكتبو، أزرار باش نعملو، و labels باش نطلّعو النتائج. نرسموها بـ Qt Designer بالـ glisser-déposer، وبعد نسجّلوها في فيشي interface.ui.
QLabel(étiquette): يطلّع نص.QLineEdit(خانة نص): المستعمل يكتب قيمة.QPushButton(زر): يبدا عملية.- كل objet عندو اسم (objectName) نختاروه في Qt Designer:
txtNom،btnSaluer،lblMessage. البرنامج يناديهم بالاسم هذا. .text()تقرا نص خانة،.setText(…)تكتب في label،.clear()تفرّغ خانة،.show()تطلّع النافذة.
البرمجة بالأحداث
البرنامج ما يتخدمش من فوق لتحت مرّة وحدة: يستنّى المستعمل يكليكي. نربطو الـ signal clicked متاع زر بـ fonction: fenetre.btnSaluer.clicked.connect(saluer). في كل كليك، الـ fonction saluer تتخدم.
انتبه : في connect(saluer)، نعطيو اسم الـ fonction، من غير قوسين. بـ connect(saluer())، الـ fonction تتخدم ديراكت، قبل أي كليك.
بـ Python
النافذة فيها خانة txtNom، زر btnSaluer و label lblMessage. شغّلها، اكتب اسمك وانزل على الزر.
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
def saluer():
nom = fenetre.txtNom.text()
fenetre.lblMessage.setText("Bonjour " + nom + " !")
app = QApplication([])
fenetre = loadUi("interface.ui")
fenetre.show()
fenetre.btnSaluer.clicked.connect(saluer)
app.exec_()
الدرس 19.2 : الحساب ومراقبة الإدخال
اللي يكتبو المستعمل ديما chaîne. قبل ما نحسبو، نحوّلوها بـ int(…) ولا float(…). أما كان الخانة فارغة ولا فيها حروف، التحويل يعمل غلطة: لازم نراقبو الإدخال ونطلّعو message.
- خانة فارغة:
if fenetre.txtA.text() == "": - عدد صحيح موجب:
ch.isdigit()صحيحة كانchفيها أرقام برك (وموش فارغة). - رسالة الغلطة تمشي في label بـ
.setText(…).
نصيحة : زر ثاني « Effacer » ياسر يتطلب: الـ fonction متاعو تنادي .clear() على كل خانة وعلى label النتيجة.
بـ Python
معدّل زوز نقاط، مع message كان نقطة ناقصة. جرّب وخلّي خانة فارغة.
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
def moyenne():
a = fenetre.txtN1.text()
b = fenetre.txtN2.text()
if a == "" or b == "":
fenetre.lblRes.setText("Remplir les deux notes")
else:
m = (float(a) + float(b)) / 2
fenetre.lblRes.setText("Moyenne : " + str(m))
def effacer():
fenetre.txtN1.clear()
fenetre.txtN2.clear()
fenetre.lblRes.clear()
app = QApplication([])
fenetre = loadUi("interface.ui")
fenetre.show()
fenetre.btnMoyenne.clicked.connect(moyenne)
fenetre.btnEffacer.clicked.connect(effacer)
app.exec_()
الدرس 19.3 : أزرار radio، cases à cocher، وقوائم منسدلة
في علوم الإعلامية، الواجهة فيها زادة اختيارات:
QRadioButton: اختيار واحد من برشا.rbGrande.isChecked()تساويTrueكان مختار.QCheckBox: option نزيدوها ولا لا، زادةisChecked().QComboBox(قائمة منسدلة):currentText()تعطي النص المختار، وcurrentIndex()بلاصتو (من 0).
نصيحة : أزرار الـ radio متاع نفس المجموعة ما يتلمّوش: كي تختار واحد الأخرين يتنحّاو.
بـ Python
كوموند بيتزا: الحجم يحدّد السوم، والفرماج الزايد يزيد 2 دينار.
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
def prix():
if fenetre.rbGrande.isChecked():
p = 14
else:
p = 8
if fenetre.chkFromage.isChecked():
p = p + 2
fenetre.lblPrix.setText("À payer : " + str(p) + " DT")
app = QApplication([])
fenetre = loadUi("interface.ui")
fenetre.show()
fenetre.btnPrix.clicked.connect(prix)
app.exec_()
الدرس 19.4 : تطليع قائمة نتائج
كي تكون النتيجة قائمة (قواسم عدد، التلاميذ الناجحين…)، نطلّعوها في QListWidget: سطر لكل عنصر. هذا في برنامج باك علوم الإعلامية.
fenetre.liste.addItem("texte")تزيد سطر في الآخر.fenetre.liste.clear()تفرّغ القائمة: نناديوها في البداية، وإلا النتائج القديمة تقعد.fenetre.liste.count()تعطي عدد الأسطر.
انتبه : addItem تستنّى chaîne: اكتب addItem(str(d)) لعدد.
بـ Python
مضاعفات n حتى 50 يظهرو في القائمة، وعددهم في الـ label.
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
def multiples():
n = int(fenetre.txtN.text())
fenetre.listeRes.clear()
k = n
while k <= 50:
fenetre.listeRes.addItem(str(k))
k = k + n
fenetre.lblNb.setText(str(fenetre.listeRes.count()) + " multiples")
app = QApplication([])
fenetre = loadUi("interface.ui")
fenetre.show()
fenetre.btnMultiples.clicked.connect(multiples)
app.exec_()
تدرّب مجانًا
كل درس فيه 3 تمارين مجانية مع تلميحات باش تطبّق الفصل هذا مع هنّيبوت.
← الفصل اللي قبل : التسجيلات (Enregistrements) · الفصل اللي بعد : التقريب والتحسين →
كل الفصول · شوف فروض 2 تكنولوجيا المصلّحة
الدروس كتبناها لـ Mission Carthage على أساس البرنامج الرسمي. الأستاذ متاعك يبقى المرجع.