الواجهة الرسومية في بايثون 4- تعلم صنع حاسبة مبسطة بنفسك

مثال آخر يبرز قوة بايثون, فمن خلال أسطر قليلة ستتكمن من عمل آلة حاسبة صغيرة كما أن هذا التطبيق ينقلنا من مجرد الرسم باستعمال Tkinter إلى توظيفها في وظائف عملية أكثر, شاهد كيف.

الآلة الحاسبة لن تقوم فقط بحساب العمليات التقليدية +,-,/,* بل أيضا العمليات الأكثر تقدما كاحتساب cos و sin من خلال إضافة مكتبة math لنلق نظرة.
# -*- coding:Latin-1 -*-
# Exercice utilisant la bibliothèque graphique Tkinter et le module math
from Tkinter import *
from math import *
# définition de l'action à effectuer si l'utilisateur actionne
# la touche "enter" alors qu'il édite le champ d'entrée :
def evaluer(event):
    chaine.configure(text = "Résultat = " + str(eval(entree.get())))
# ----- Programme principal : -----
fenetre = Tk()
entree = Entry(fenetre)
entree.bind("<Return>", evaluer)
chaine = Label(fenetre)
entree.pack()
chaine.pack()
fenetre.mainloop()

طريقة عمل البرنامج تعتمد في اﻷساس على تحويل النص الذي هو من نوع string إلى أرقام ليتمكن من حسابها ثم تحويل الرقم المتحصل عليه إلى صيغته النصية string من جديد و نشر النتيجة.

دعونا نبدأ بالتحليل من البداية 

def evaluer(event):
    chaine.configure(text = "Résultat = " + str(eval(entree.get())))

هذه الوظيفة Function سنستعملها لاحقا لنشر النتيجة التي تحصلنا عليها حيث سنقوم بنشر العنصر chaine بالشكل التالي:
سيكتب أولا Resultat أو result كما بالصورة يليها النتيجة المتحصل عليها و قد استعملنا في ذلك eval و لنفهم كيفية عملها دعونا نجري تجربة صغيرة. نفتح أولا Terminal و نكتب python لنتمكن من التعامل مع البرنامج مباشرة.
ثم سنكتب الأوامر التالية:
chaine = "(25 + 8)/3"
res = eval(chaine)
print res +5
لنلاحظ بذلك أنه في البداية كتبنا نص من دون احتساب أي شيء لنتمكن من احتسابها وجب علينا أولا تحويلها و لا يكون ذلك سوى باستخدام eval و أخيرا نتمكن من جمع النتيجة السابقة مع خمسة لنحصل على (أدع لكم تجربة ذلك)
و بما أن النص في حالتنا متغير فيمكننا بحسب طلب المستخدم فهو سيقوم بالقراءة مباشرة من entree و أخيرا ننشر النتيجة بعد تحويلها من جديد إلى نص String باستعمال str.

في البرنامج الرئيسي لدينا
entree = Entry(fenetre)
و تمثل النافذة النصية.
chaine = Label(fenetre)
و هي Label التي سنضع بها النتيجة.
entree.pack()
chaine.pack()
لجعلها مرئية على النافذة, وليتمكن البرنامج فعلا من تنفيذ الأوامر المطلوبة منه وجب إضافة
 entree.bind("<Return>", evaluer)
مع التنبيه إلى أن return تقوم بتحديد نوعية الحدث الذي يمكن أن يأتي من لوحة المفاتيح أو من فأرة الحاسوب
للتسهيل اﻷمور على المبرمجين و حتى لا يختلط اﻷمر عليهم نذكر بأن جافا تستعمل هي اﻷخرى أمرا مشابها من بينها.

mouseEntered
mousePressed
actionPerformed
mouseReleased
mouseClicked
mouseExited
 إذا هذا السطر يمكن ترجمته على النحو التالي:
اقرأ الحدث<الضغط على الزرReturn > المتعلق بالعنصر object المسمى entree , عندها نفذ الوظيفة evaluer التي تحدثنا عنها في بداية الشرح.