التخطي إلى المحتوى الرئيسي

تعريف مكتبة tkinter

 

ما هي tkinter وما علاقتها بـ ( Tcl/Tk)؟

قبل أن نبدأ بشرح العلاقة بين tcl/tk و tkinter علينا أولا أن نوضح معنى كلمة wrapper.
wrapper -وتعني حرفيًا بالمغلف- هي كلمة تستخدم لوصف البرنامج/الكود الذي يغلف كود آخر مكتوب بلغة أخرى سواء لإضافة المزيد من الخصائص أو نقل الميزة إلى لغة جديدة أو برنامج جديد أو الحاجة إلى تسهيل التعقيد الخاص بالكود ليسهل استخدامه في وظيفة أخرى بحيث لا نضطر لإعادة كتابة الكود من البداية ولكن بدلا من ذلك سنقوم فقط بتغليف الكود القديم بحيث يتجاوب مع متطلباتنا. للكلمة معاني أخرى أيضا لكن هذا خارج نطاق هذه المقالة.

لغة tcl تنطق “تيكل” اختصارا لـ (Tool Command Language) وهي لغة نصية قام بإنشاءها شخص يدعى John Ousterhout (جون أوسترهوت) في ثمانينيات القرن الماضي وتم إصدارها في عام 1988 لكي يتم إستخدامها بسهولة في عدة برامج كلغة مفسرة بحيث تعطي مكونات تمكن المبرمجين من إضافة خواص أخرى للغة لكي يتم توظيفها في التطبيقات بلا تحديدات أو معوقات. حيث أن أهداف اللغة كانت 1- أن يسهل على أي برنامج يستخدم اللغة أن يضيف ميزاته الخاصة بلا صعوبة. 2- أن توفر اللغة السهولة والعملية بحيث يمكن استخدامها في عدة برامج بلا تعقيد عملية إضافة الخواص والمميزات. 3- أن تعمل اللغة على “لصق” مكونات التطبيق معًا بحيث توفر اللغة سهولة دمج عدة أجزاء معا.

tk في فترة كانت فيها واجهات المستخدم المرئية (GUI) تكبر بسرعة كانت هناك حاجة لصنع أداة توفر إمكانية إضافة مكونات متعددة معا ولصقها معا لتكون تطبيق ذا واجهة. فكر الدكتور جون في عمل عدة مكونات بسيطة باستخدام لغة tcl وقام بعد ذلك باختبار تلك المكونات وجمعها معا في تطبيق واحد وهنا حيث ولدت Tk كأحد تطبيقات لغة tcl.

tkinter تم عمل تي كي انترفيس كمغلف لأداة tk مع بعض الإضافات التي تعطي تجربة مناسبة للغة بايثون .

مكونات المكتبة:

تحتوي المكتبة على الكلاس Tk والذي يقوم عادة بإنشاء الواجهة الرئيسية للتطبيق ويقوم أيضا بإنشاء نسخة من مفسر للغة tcl حيث لكل نسخة من Tk مفسر خاص بها.
يحتوي الكلاس Tk على الصفات (attributes) التالية:

tk وهو التطبيق الخاص ب tk والذي يوفر وصول إلى مفسر tcl. كل عناصر الواجهة التابعة لكلاس ال Tk والتي تم إنشاءها كإبن له (مثلا Label, Button…إلخ) جميعهم يتشارك نفس الصفة (attribute) tk

master بالعربية سيد (كالعلاقة بين العبد والسيد) وهو يعبر عن عنصر الواجهة التي يحتوي العنصر الحالي. وبالنسبة للواجهة الرئيسية Tk السيد لها None حيث انه لا يترأسها أية عناصر في الواجهة.
بينما مثلا لو أخذنا عنصر مثل ال Label والذي وضع كإبن للواجهة الرئيسية فسيكون ال master لهذا ال Label هو كلاس Tk الخاص بالواجهة الرئيسية.

children تحتوي تلك الصفة (attribute) على قاموس (dict) به كل العناصر التابعة لتلك الواجهة.
فمثلا الواجهة الرئيسية إذا كانت تحتوي على مربع إدخل، نص، زر فإن القاموس children يحتوي على تلك العناصر بحيث يكون المفتاح يعبر عن اسم العنصر وقيمة المفتاح داخل القاموس يعبر عن ال instance الخاصة بذلك العنصر بحيث يمكن استدعاءها وإجراء تعديلات عليها.

وسيتضح لنا كل ذلك إن شاء الله مع الأمثلة العملية.

عناصر الواجهات

تحتوي tkinter على نوعين من الواجهات:
النوع الأول يأتي ضمن tk ويحتوي على 12 widgets (عناصر الواجهة مثل الازرار والنصوص وغيرها) وهذا النوع يعطيك الحرية في اختيار الألوان والخطوط وغير ذلك من الإعدادات غير أن هذا النوع لا يتشابه مع المكتبات الاخرى التي تعطي واجهات Native أي تشابه في شكلها عناصر الواجهة المقدمة من النظام.

النوع الثاني يأتي ضمن tkinter.ttk ويحتوي بالإضافة إلى الـ 12 عنصرا الموجودة في tk على 6 عناصر إضافية.
ميزة هذا الخيار هو أنها تأتي تصاميم مظهرها جيد وتشبه في تصميمها تصاميم النظام. لكنها تأتي مع Style شكل معين موجود مسبقا بها.

يوجد لعناصر الواجهة تسلسل معين، حيث توجد علاقة بين العناصر كعلاقة (أب - ابن) حيث أن لكل عنصر غالبا ما يوجد أب له أو ابن أو عدة أبناء.

فمثلا إذا أضفنا زرا للواجهة الرئيسية فإن ذلك الزر له أب وهو الواجهة.
بينما إذا أضفنا إطارا داخل الواجهة ثم أضفنا داخل ذلك الإطار زرا فإن هناك تسلسل بين تلك العناصر الثلاثة حيث أن الزر أبوه هو الإطار والإطار أبوه هو النافذة الرئيسية التي هو بها.

يوجد أيضا لعناصر الواجهة خيارات متعددة (options) تمكننا من إضافة تعديلات على مظهر أو تصرفات عنصر الواجهات أو النص التي تحتويه وغيرها من الخيارات سنتعرف عليها في الشرح العملي إن شاء الله.

كما يوجد أيضا لعناصر الواجهة خيارات لموقع العناصر مقارنة بالعناصر الأخرى أو النافذة التي تحتويه، حتى تكن قادرا على تغيير مواضع العناصر في الشاشة وترتيبها بالشكل الذي تراه مناسبا لتصميمك.

كما يوجد أيضا لعناصر الواجهة معالجة للأحداث (Event handlers) والتي تمكن العناصر من التفاعل مع أحداث معينة، فمثلا نحتاج إلى معالجة حدث النقر على الزر أو حدث الكتابة في مربع الإدخال، أو الحدث الذي يهتم بتحديث كيف يبدوا مظهر العنصر.

تحتوي tk على 12 widgets وهم (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar, and Spinbox).

كما تقدم ttk عناصر إضافية وهي (Combobox, Notebook, Progressbar, Separator, Sizegrip and Treeview).

كما قلنا فإن عناصر ttk سواء تلك الموجودة في tk أم تلك الموجودة فقط في ttk فكلها تشارك نفس التصميم طالما أنك قمت باستيرادها من tkinter.ttk وليس من tkinter مباشرة.

تعليقات 0

إرسال تعليق

Cancel