مشاريع Python Tkinter [شرح خطوة بخطوة]

نشرت: 2020-09-14

قد يكون التعرف على واجهة المستخدم الرسومية في بايثون أمرًا صعبًا للغاية. لا تقلق لأننا نساندك! في هذه المقالة ، شاركنا برنامج تعليمي Tkinter حتى تتمكن من العمل على مشاريع Python GUI بكفاءة. بعد الانتهاء من هذا البرنامج التعليمي ، ستكون معتادًا على اللبنات الأساسية لإنشاء مشاريع Python Tkinter. إذا كنت ترغب في اكتساب المزيد من الخبرة في Python ، فراجع برامج علوم البيانات لدينا.

لقد شاركنا أيضًا رمز كل خطوة. ومع ذلك ، نوصي بنسخه ولصقه فقط عند فهم كيفية عمله. وإلا فلن يكون ذا فائدة كبيرة.

جدول المحتويات

ما هو Tkinter؟

Tkinter هي حزمة لبيثون لاستخدام مجموعة أدوات Tk GUI. يمكنك استخدام Tkinter لإنشاء برامج واجهة المستخدم الرسومية من خلال Python. بينما Tkinter قادر على إنتاج العديد من البرامج ، قد تحتاج إلى استخدام الوحدات النمطية للتطبيقات المتقدمة. يجب أن تكون على دراية بأساسيات Tkinter قبل العمل على مشاريع Python Tkinter:

برنامج Hello World في Tkinter

هذا مثال على برنامج hello world في Tkinter:

استيراد tkinter كما tk

تطبيق فئة (tk.Frame):

def __init __ (ذاتي ، رئيسي = لا شيء):

سوبر () .__ الحرف الأول __ (رئيسي)

self.master = ماجستير

حزمة النفس ()

self.create_widgets ()

def create_widgets (ذاتي):

self.hi_there = tk.Button (ذاتي)

self.hi_there [“text”] = "Hello World \ n (انقر فوقي)"

self.hi_there [“أمر”] = self.say_hi

self.hi_there.pack (الجانب = "أعلى")

self.quit = tk.Button (self، text = ”QUIT”، fg = ”red”،

الأمر = self.master.destroy)

self.quit.pack (الجانب = "أسفل")

def say_hi (النفس):

طباعة ("مرحبًا ، الجميع!")

الجذر = tk.Tk ()

التطبيق = التطبيق (رئيسي = جذر)

app.mainloop ()

مدراء الهندسة في تكينتير

مفهوم رئيسي آخر يجب أن تعرفه أثناء العمل في مشاريع Python Tkinter هو مديرو الهندسة. بدون استخدام مدير الهندسة ، لن تظهر أدواتك على الشاشة. هناك ثلاث طرق أساسية يمكنك من خلالها إضافة مدير هندسة:

جريد

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

رزمة

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

مكان

تضع هذه الطريقة عناصر واجهة المستخدم في موقع محدد وفقًا لعنصر واجهة المستخدم الأصلي.

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

الخروج: 42 أفكار ومواضيع مثيرة لمشروع بايثون للمبتدئين

بناء واجهة المستخدم الرسومية في بايثون (Tkinter Tutorial)

الخطوة # 1: استيراد الوحدة

لبدء العمل على التطبيق ، يتعين علينا أولاً استيراد الوحدة الضرورية. يمكنك القيام بذلك عن طريق استيراد الوحدة النمطية في مساحة الاسم الخاصة بك. سيسمح لك باستخدام الثوابت والفئات بأسمائها بدلاً من تأهيلها. هذا يعني أنه يمكنك استخدام "Label" باستخدام اسمه بدلاً من تأهيله كـ "TkinterLabel". سيجعل ذلك الأمور سهلة نسبيًا ، ويمكنك توفير الكثير من الوقت لأن تأهيل كل فصل دراسي وثابت قد يكون مرهقًا للغاية. استخدم الكود التالي لاستيراد الوحدة:

>>> من Tkinter استيراد *

إذا لم تكن Python مرتبطة بـ Tk (أو Tcl) في نظامك أو إذا لم يكن لديك Tk (أو Tcl) مثبتًا في نظامك ، فسترى رسالة خطأ في هذا القسم. لإصلاح هذه المشكلة ، ستحتاج إلى وصول مسؤول النظام الخاص بك. تأكد من حل هذه المشكلة عن طريق فعل الشيء نفسه.

من ناحية أخرى ، إذا كنت لا ترى أي رسائل خطأ في هذه الأقسام ، يمكنك الانتقال إلى الخطوة التالية لإنشاء نافذة:

>>> فوز = Tk ()

لقد خصصنا نافذتنا المتغير "win". بعد تنفيذ الكود أعلاه ، سترى نافذة صغيرة على الشاشة. يجب أن يظهر شريط العنوان الخاص به "tk" مكتوبًا فيه.

هذا يعني أنك أكملت هذه الخطوة بنجاح ويمكنك الآن البدء في إنشاء واجهة المستخدم الرسومية في Python.

الخطوة رقم 2: إضافة الأزرار

الآن بعد أن بدأنا تشغيل Tkinter ، يمكننا إضافة أزرار إلى برنامجنا. الأزرار هي أبسط قسم في أي برنامج واجهة مستخدم رسومية ، لذلك سنبدأ بها:

>>> b1 = زر (فوز ، نص = "واحد")

>>> b2 = زر (فوز ، نص = "اثنان")

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

هذا لأننا نحتاج إلى إضافة شبكة وحزمة إلى برنامجنا. يطلق عليهم مديرو الهندسة ، وقد ناقشناهم في وقت سابق في هذه المقالة. سنضيف مدير الحزم في القسم التالي لدينا:

الخطوة # 3: تنفيذ مدير الحزم

سنستخدم طريقة الحزمة لإضافة أزرارنا إلى عنصر واجهة المستخدم الأصلي. مع مدير الحزم ، يمكنك معرفة أي جانب من عنصر واجهة المستخدم الأصل الذي تريد أن يتم تعبئة عنصر واجهة المستخدم الخاص بك به. يمكنك استخدام TOP ، RIGHT ، BOTTOM ، LEFT كوظائفك. يختار البرنامج TOP كإعداد افتراضي إذا لم تحدد جانبًا. دعنا نضيف مدير الحزم أولاً:

>>> b1.pack ()

>>> b2.pack ()

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

>>> b2.pack (الجانب = اليسار)

>>> b1.pack (الجانب = اليسار)

لاحظ أننا نستخدم مدير الحزم في الغالب عندما يتعين علينا وضع أدواتنا في هذين الأمرين (الأفقي والعمودي) فقط. بالنسبة للأنواع الأخرى من مواضع الأدوات ، نستخدم طريقة الشبكة أو طريقة المكان. يمكنك إضافة بعض المسافة بين الأزرار والنافذة باستخدام وظائف "padx" أو "pady". تضيف وظيفة "padx" حشوة إلى المحور X (يسار ويمين) من الأداة ، وتضيف وظيفة "pady" حشوة إلى المحور Y (أعلى وأسفل) للجهاز.

>>> b1.pack (الجانب = اليسار ، padx = 10)

>>> b2.pack (الجانب = اليسار ، الوسادة = 10)

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

الخطوة رقم 4: مدير الشبكة

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

سننشئ نافذة جديدة بنفس الأزرار التي أنشأناها من قبل لاختبار مدير الشبكة. ومع ذلك ، سنضيف الأزرار في شبكة 2 × 2:

>>> فوز = Tk ()

>>> b1 = زر (فوز ، نص = "واحد")

>>> b2 = زر (فوز ، نص = "اثنان")

>>> b1.grid (الصف = 0 ، العمود = 0)

>>> b2.grid (الصف = 1 ، العمود = 1)

ستلاحظ أن برنامجنا قد ترك بعض الخلايا فارغة. هذا لأننا لم نضف أي شيء إلى الصف 0 أو العمود 1 (أو الصف 1 والعمود 0). سنجرب أداة جديدة لرؤية شيء مثير للاهتمام:

>>> l = Label (win، text = "This is a label")

>>> l.grid (الصف = 1 ، العمود = 0)

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

يجب أن تقرأ: راتب Django Developer في الهند

الخطوة رقم 5: تحسين التخطيط

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

>>> فوز = Tk ()

>>> f = الإطار (فوز)

>>> b1 = زر (f ، "واحد")

>>> b2 = زر (f ، "اثنان")

>>> b3 = زر (f ، "ثلاثة")

>>> b1.pack (الجانب = اليسار)

>>> b2.pack (الجانب = اليسار)

>>> b3.pack (الجانب = اليسار)

>>> l = Label (فوز ، "هذه التسمية فوق جميع الأزرار")

>>> l.pack ()

>>> f.pack ()

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

باستخدام وظيفة الشبكة ، يمكنك استخدام المعلمة "اللاصقة" التي تتيح لك استخدام إحداثيات الخريطة (S ، و N ، و W ، و SW ، و NE ، وما إلى ذلك) لتحديد مواضع الأدوات. قبل أن ننتقل إلى القسم التالي ، تأكد من فهمك للوظائف التي ناقشناها حتى الآن. اختبر الشبكة ، ويعمل الإطار معًا لترى كيف يمكنك استخدامه في مشاريع Python GUI الأخرى.

الخطوة رقم 6: جعل الأزرار مفيدة

إذا قمت بالنقر فوق الأزرار التي أنشأناها حتى الآن ، فلا بد أنك لاحظت أنها لا تستجيب (لا تفعل أي شيء). يتم الضغط عليها عند النقر والتمييز عند التمرير فوقها ، لكنها لا تؤدي أي وظائف. لجعل أزرارنا تؤدي وظائف محددة ، سيتعين علينا استخدام وظيفة "التكوين".

يمكننا تمرير أي وسيطة كلمة رئيسية إلى طريقة "تكوين" الأداة لتمريرها أثناء إنشائها. هذا مثال:

>>> b1.configure (text = "Uno")

تربط معلمة "الأمر" الأزرار بوظائف رد الاتصال عند إنشائها أو إضافة "تكوين" إليها. لفهم كيفية عملها ، سننشئ وظيفة تطبع رسالة:

>>> def but1 ():

... طباعة ("تم الضغط على الزر الأول")

...

>>> b1.configure (الأمر = but1)

لذلك عندما تنقر فوق الزر المعني ، فسيتم طباعة رسالة.

الخطوة رقم 7: إضافة أدوات الإدخال

تسمح أدوات الإدخال للمستخدمين بإدخال نص في البرنامج. ومع ذلك ، يجب أن نجعل أداة الإدخال تعمل كما فعلنا مع الأزرار. يجب أن يقوم عنصر واجهة المستخدم باسترداد (وتعيين) النص. لكي تؤدي أداة الإدخال هذه الوظيفة ، يجب عليك استخدام كائن Tkinter "StringVar". يحمل الكائن "StringVar" النص في شكل سلسلة ويجعله قابلاً للقراءة من خلال get.

سننشئ نافذة جديدة لاختبار أدوات الإدخال الخاصة بنا:

>>> فوز = Tk ()

>>> v = StringVar ()

>>> ه = دخول (فوز ، متغير نصي = ت)

>>> e.pack ()

دعنا الآن نضيف "this is a test" مثل الإدخال ونسترجع نفس الشيء من خلال StringVar:

>>> v.get ()

"هذا اختبار"

يمكنك الآن ضبط النص في StringVar وجعله يظهر في الأداة:

>>> v.set ("تم تعيين هذا من البرنامج")

القطعة الإضافية: أداة Listbox

بصرف النظر عن عنصر واجهة الإدخال ، يمكننا إضافة عنصر واجهة مستخدم listbox. تتيح أداة مربع القائمة للمستخدم اختيار عنصر من القائمة. سننشئ نافذة جديدة لتجربة أداة مربع القائمة:

>>> فوز = Tk ()

>>> رطل = Listbox (فوز ، ارتفاع = 3)

>>> رطل باك ()

>>> lb.insert (النهاية ، "الإدخال الأول")

>>> lb.insert (النهاية ، "الإدخال الثاني")

>>> lb.insert (النهاية ، "الإدخال الثالث")

>>> lb.insert (النهاية ، "الإدخال الرابع")

يمكنك إدراج عناصر في بداية القائمة ووسطها ونهايتها. يمكنك حذفهم أيضا. إذا كان هناك عدد كبير جدًا من العناصر في القائمة ، فيمكنك إضافة شريط تمرير:

>>> sb = شريط التمرير (فوز ، توجيه = عمودي)

>>> sb.pack (الجانب = اليسار ، ملء = Y)

لجعل شريط التمرير الخاص بنا يعمل ، سيتعين علينا استخدام وظائف معاودة الاتصال:

>>> sb.configure (الأمر = lb.yview)

>>> lb.configure (yscrollcommand = sb.set)

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

الخطوة رقم 8: الخطوات النهائية

سنستخدم جميع الأشياء التي تعلمناها في برنامج Tkinter التعليمي الخاص بنا لإنشاء محرر قائمة الهاتف:

مجموع الكود

#! / usr / bin / env python3

من استيراد tkinter *

من استيراد الهواتف *

def which_selected ():

طباعة ("في {0}". تنسيق (select.curselection ()))

عودة int (select.curselection () [0])

def add_entry ():

phonelist.append ([fnamevar.get ()، lnamevar.get ()، phonevar.get ()])

set_select ()

def update_entry ():

قائمة الهاتف [which_selected ()] = [fnamevar.get () ،

lnamevar.get () ،

phonevar.get ()]

def delete_entry ():

del phonelist [which_selected ()]

set_select ()

def load_entry ():

fname، lname، phone = phonelist [which_selected ()]

fnamevar.set (fname)

lnamevar.set (lname)

phonevar.set (هاتف)

def make_window ():

fnamevar العالمية ، lnamevar ، فونيفار ، حدد

فوز = Tk ()

الإطار 1 = الإطار (فوز)

frame1.pack ()

التسمية (الإطار 1 ، النص = "الاسم الأول"). الشبكة (الصف = 0 ، العمود = 0 ، اللاصق = W)

fnamevar = StringVar ()

fname = دخول (frame1، textvariable = fnamevar)

fname.grid (صف = 0 ، عمود = 1 ، مثبت = W)

التسمية (الإطار 1 ، النص = "اسم العائلة"). الشبكة (الصف = 1 ، العمود = 0 ، اللاصق = W)

lnamevar = StringVar ()

lname = دخول (frame1، textvariable = lnamevar)

lname.grid (صف = 1 ، عمود = 1 ، مثبت = W)

التسمية (الإطار 1 ، النص = "الهاتف"). الشبكة (الصف = 2 ، العمود = 0 ، اللاصق = W)

phonevar = StringVar ()

الهاتف = دخول (إطار 1 ، متغير نصي = فونيفار)

phone.grid (الصف = 2 ، العمود = 1 ، لزجة = W)

الإطار 2 = الإطار (الفوز) # صف الأزرار

frame2.pack ()

b1 = زر (الإطار 2 ، النص = "إضافة" ، الأمر = add_entry)

b2 = زر (الإطار 2 ، النص = "تحديث" ، الأمر = update_entry)

b3 = زر (إطار 2 ، نص = "حذف" ، الأمر = delete_entry)

b4 = زر (الإطار 2 ، النص = "تحميل" ، الأمر = load_entry)

b5 = زر (الإطار 2 ، النص = "تحديث" ، الأمر = set_select)

b1.pack (الجانب = اليسار)

b2.pack (الجانب = اليسار)

b3.pack (الجانب = اليسار)

b4.pack (الجانب = اليسار)

b5.pack (الجانب = اليسار)

frame3 = الإطار (الفوز) # تحديد الأسماء

frame3.pack ()

انتقل = شريط التمرير (إطار 3 ، توجيه = عمودي)

حدد = Listbox (frame3، yscrollcommand = scroll.set، height = 6)

scroll.config (الأمر = select.yview)

scroll.pack (الجانب = يمين ، تعبئة = Y)

select.pack (الجانب = اليسار ، التعبئة = كليهما ، التوسيع = 1)

عودة الفوز

تحديد set_select ():

phonelist.sort (مفتاح = سجل لامدا: سجل [1])

select.delete (0 ، النهاية)

بالنسبة إلى fname ، lname ، الهاتف في قائمة الصوت:

select.insert (END، “{0}، {1}”. format (lname، fname))

فوز = make_window ()

set_select ()

win.mainloop ()

ها هي قائمة الهاتف:

phonelist = [['Chris'، 'Meyers'، '241-343-4349']،

["روبرت" ، "سميث" ، "202-689-1234"] ،

["جانيت"، "جونز"، "609-483-5432"]،

["رالف"، "بارنهارت"، "215-683-2341"]،

['Eric'، 'Nelson'، '571-485-2689']،

['Ford'، 'المحافظ'، '703-987-6543'] ،

['Mary'، 'Zigler'، '812-567-8901'] ،

['Bob'، 'Smith'، '856-689-1234']]

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

يجب أن تقرأ: سلسلة ماركوف في دروس بايثون

تعرف على المزيد حول مشاريع Python و Python GUI

يمكن أن يكون العمل في مشاريع Python Tkinter ممتعًا جدًا إذا كنت تعرف ما تفعله. إنها أيضًا طريقة رائعة لفهم نقاطك القوية (والضعيفة). يمكنك معرفة المزيد عن بايثون ؛ نوصي بالتوجه إلى مدونتنا. فيما يلي بعض المصادر لمزيد من القراءة:

  • 10 مشاريع Python GUI
  • كيف تصنع روبوت محادثة في بايثون
  • 42 فكرة لمشروع بايثون

ما رأيك في هذا المشروع؟ هل عملت في مشاريع أخرى في Python Tkinter؟ دعنا نعرف.

إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع برنامج IIIT-B & upGrad التنفيذي PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1 - في 1 مع موجهين في الصناعة ، أكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

هل لغة Python مناسبة لإنشاء واجهات مستخدم رسومية؟

تمتلك Python عددًا من أطر واجهة المستخدم الرسومية ، بدءًا من Tkinter إلى عدد من حلول الأنظمة الأساسية الأخرى ، فضلاً عن الارتباطات الخاصة بالمنصة. يعد إنشاء واجهات مستخدم رسومية أمرًا سريعًا وسهلاً عندما يتم دمج Python مع Tkinter. تعد Python مثالية لإنشاء واجهة المستخدم الرسومية نظرًا لأنها تحتوي على الكثير من عناصر واجهة المستخدم المضمنة ، كما أنها تُنشئ النوافذ بسرعة ، وتتمتع بتقنيات قوية للتعامل مع الأحداث ، ولديها إمكانات رسم بدائية.

Tkinter أم KIVY: أيهما أفضل للاستخدام؟

Kivy هو إطار عمل Python مجاني ومفتوح المصدر لإنشاء أو تصميم برامج واجهة مستخدم فريدة وجذابة. إذا كنت من مطوري Python الذين يستمتعون بإنشاء التطبيقات ، فإن KIVY يعد خيارًا ممتازًا لإنشاء تطبيقات أكثر ديناميكية. Tkinter هي واجهة Python الأكثر استخدامًا لتطوير تطبيقات GUI بسرعة وسهولة. إذا كنت جديدًا على Python وترغب في تعلم كيفية إنشاء واجهات كمبيوتر ، فابدأ بـ Tkinter وتعلم الأساسيات.