عمل واجهة رسومية من خلال بايثون

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



الواجهة الرسومية GUI

نقصد ب GUI : Graphical User Interfaces و هو أحد الأقسام التي يجب أن يطلع عليها كل مبرمج و يكون عالما بكل خفاياها,
من بين تلك اﻷشياء يوجد أمر يحتاجه المبرمج لتبسيط عمله يتمثل في استعمال مكتبة/bibliothèque/ Library رسومية.
مع بايثون تعتبر المكتبة الأكثر استعمالا هي Tkinter و هي مقتبسة من لغة Tk و التي كانت موجهة باﻷساس للغة Tcl. إلا أنه توجد مكتبات أخرى متنوعة و يمكن استعمالها مثل wxPython, pyQT, pyGTK.

أول خطوة مع Tkinter


نفترض أن tkinter قد وقع تنصيبه على النظام ويمكن لمستعملي أوبنتو إضافتها من خلال symantec إن لم تكن موجودة,
الآن أول ما سنقوم به هو جلب المكتبة :
from Tkinter import *
في المثال التالي سنقوم بعمل برنامج بسيط كما وضحنا بالمقدمة


from Tkinter import *
fen1 = Tk()
tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')
tex1.pack()
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
bou1.pack()
fen1.mainloop()
سننسخ جميع هذه اﻷسطر في ملف سمه كما تشاء و ينتهي ب py.* ثم نقوم من خلال terminal بفتح الملف مثال:
python interface.py 

 لنحصل على النتيجة التالية:


تفاصيل أكثر

في السطر الأول from Tkinter import * قمنا بجلب جميع محتويات Classes في وحدة Tkinter و التي من دونها فالبرنامج لن يكون قادرا على التعرف على بقية الأسطر.

في السطر الثاني أضفنا
fen1 = Tk()
حيث ()tk هو قسم class استعملناه لإضافة instance ( مصطلح يشير إلى object بخاصيات معينة) (عذرا لإستعمالي المصطلحات باللغة الأنجليزية فأنا لم أدرسها بالعربية) , أسميناه fen اختصار ل fenetre أي نافذة بالفرنسية ( الإسم هنا غير مهم يمكنك تسميته كما تشاء شرط أن تحافظ على اﻹسم المستعمل في بقية البرنامج )

في السطر الثالث اﻷمر سهلة نسبيا
tex1 = Label(fen1, text='Bonjour tout le monde !', fg='red')
قمنا بعمل tex1 الذي هو في الحقيقة Label أي التعليق الذي ظهر لنا في الصورة و يحتوي على النص المراد نشره  أما fg فتستعمل كما هو واضح لتلوين النص, لفهم لماذا fg فلأنها إختصار ل font ground

كذلك نفس الأمر بالنسبة ل
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
قمنا بتحديد زر button أسميناه Quitter أي خروج  و أعطيناه وظيفة إغلاق النافذة

في السطران الرابع و السادس وقع ادخال كل من button and label إلى النافذة. (جرب حذفهما فستلاحظ إختفائهما)

أما بالسطر اﻷخير فاﻷمر مهم للغاية حيث سيتولى هذا السطر نقل الأوامر, و بالتحديد هنا فعند الضغط من خلال mouse على button فإن loop ستتولى القيام بالتثبت بصفة دورية من التثبت من جميع اﻷوامر و نقلها إلى نظام التشغيل ليتولى تنفيذها.
لذلك من دون السطر اﻷخير فلن يعمل على اﻹطلاق .

في اﻷخير

كما تلاحظون البرمجة الرسومية سهلة في مبادئها و لكن تحتاج لمعرفة مسبقة بال OOp لذا سأضع رابط من ويكيبيديا لتبسيط اﻷمور.
كما أنبه إلا أن جميع الشروحات التي أعتمدت و سأعتمد عليها مستقبلا مأخوذة من كتاب Apprendre à programmer avec python للمؤلف Gérard swinin