كل شيء عن Tkinter: مكتبة الواجهات الرسومية في Python

آخر تحديث: 28 دي جوليو دي 2025
نبذة عن الكاتب: تكنوديجيتال
  • Tkinter هي مكتبة Python القياسية لإنشاء واجهات رسومية.
  • إنه يتضمن مجموعة واسعة من الأدوات وهو متعدد المنصات.
  • سهولة استخدامه تجعله الخيار الأمثل للمبتدئين والخبراء.

com.tkinter

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

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

ما هو Tkinter وما هي استخداماته؟

تُعدّ Tkinter المكتبة القياسية للغة بايثون لإنشاء واجهات المستخدم الرسومية (GUIs) . وهي مبنية على تقنية Tcl/Tk، وتوفر طبقة بسيطة وسلسة في بايثون لإنشاء النوافذ والأزرار والقوائم ومربعات النصوص وجميع أنواع العناصر المرئية . وقد كانت جزءًا من بايثون منذ إصداراتها الأولى، مما يُسهم في استقرارها الاستثنائي وتوافقها مع مختلف المنصات.

أُنشئت منصة Tcl/Tk عام ١٩٨٨ على يد جون أوسترهوت بهدف تصميم واجهة مستخدم رسومية سريعة وسهلة الحمل. برزت Tkinter كنسخة مُخصصة من بايثون، وتطورت لتصبح الخيار الأمثل لمن يبحثون عن تطوير تطبيقات سطح مكتب بسيطة أو أدوات إنتاجية بسيطة.

الميزات الرئيسية لـ Tkinter

  • البساطة ومنحنى التعلم المنخفض: يمكنك البدء بإنشاء النوافذ وإضافة عناصر رسومية ببضعة أسطر برمجية فقط. مثالي إذا كنت تتعلم بايثون أو ترغب في تطوير أدوات سريعة دون الحاجة إلى استثمار مبالغ طائلة في أطر عمل معقدة.
  • المتعدد: سيعمل تطبيقك بكفاءة على أنظمة Windows وmacOS وLinux إذا ثبّت بايثون بشكل صحيح. يضمن التكامل مع عناصر التحكم الأصلية لنظام التشغيل مظهرًا متناسقًا واحترافيًا.
  • خفيف وسريع: نظرًا لأنه مدمج في Python ولديه حد أدنى من التبعيات، فإن تحميل وتشغيل تطبيقات Tkinter يكون سريعًا حتى على أجهزة الكمبيوتر المتواضعة.
  • مجموعة متنوعة من الأدوات: الأزرار، والعلامات، ومربعات النص المكونة من سطر واحد أو متعدد الأسطر، والقوائم المنسدلة، وأشرطة التمرير، وعلامات التبويب... ومع الوحدة النمطية ttk (Themed Tk)، يمكنك الاستمتاع بالأدوات ذات الطابع الحديث وتكوين مظهرها حسب رغبتك.
  • نموذج الحدث القوي: يعمل مع حلقة رئيسية (mainloop()) الذي يستمع إلى أي إجراء للمستخدم (النقرات والمفاتيح وما إلى ذلك) ويستجيب في الوقت الحقيقي.
  • قابلة للتوسيع والجمع: يمكنك إنشاء عناصر واجهة المستخدم المخصصة الخاصة بك ودمج Tkinter مع مكتبات Python الأخرى (مثل Pillow للصور أو Matplotlib للرسوم البيانية) لتوسيع قدرات برنامجك.

كيفية استخدام Tkinter؟ البدء والبنية الأساسية

com.tkinter

بدء استخدام Tkinter بسيط للغاية، ما عليك سوى استيراد الوحدة وإنشاء نافذة رئيسية. يتيح بايثون عدة طرق استيراد، وأكثرها شيوعًا هو import tkinter as tk، مما يجعل من السهل الإشارة إلى المكونات ذات البادئة تك. خلال التطوير.

import tkinter as tk

# Crear la ventana principal
ventana = tk.Tk()
ventana.title("Mi primera aplicación con Tkinter")
ventana.geometry("300x200")

# Mostrar la ventana, manteniéndola abierta
ventana.mainloop()

الطريقة mainloop() هو المفتاح: إنها الحلقة الرئيسية التي تبقي النافذة مفتوحة وتحديثها باستمرار للتعامل مع أي تفاعل.

  دليل شامل لاختصارات لوحة المفاتيح في برنامج Visual Studio Code

أساسيات Tkinter: الأدوات والتسلسل الهرمي

تُعتبر الأدوات (widgets) جوهر أي واجهة مستخدم رسومية (GUI) مبنية باستخدام Tkinter . الأداة هي أي عنصر مرئي وتفاعلي: أزرار، تسميات، مربعات نص، قوائم، قوائم، إلخ.

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

مثال أساسي: التسمية والزر

import tkinter as tk

root = tk.Tk()
root.title("Ejemplo de widgets")

etiqueta = tk.Label(root, text="¡Hola, Tkinter!")
etiqueta.pack()

boton = tk.Button(root, text="Cerrar", command=root.destroy)
boton.pack()

root.mainloop()

في هذا المثال، ملصق و زر يتم إضافتها إلى النافذة الرئيسية باستخدام الطريقة pack()واحد من مديري الهندسة من Tkinter (معًا مع grid() y place()).

مديرو الهندسة: الحزمة والشبكة والمكان

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

  • رزمة: يُرتب العناصر تسلسليًا (من أعلى إلى أسفل أو من اليسار إلى اليمين) بناءً على ترتيب إضافتها. الخيارات: side, fill, expand...
  • شبكة: يُنظّم عناصر واجهة المستخدم في صفوف وأعمدة، مثل الجداول. مفيد جدًا للنماذج أو التخطيطات المُهيكلة.
  • مكان: يسمح بتحديد المواقع المطلقة باستخدام إحداثيات x وy. يُنصح به فقط للواجهات المحددة جدًا.

خيارات مدير الحزمة

  • مِرسَاة: يحدد مكان تثبيت الأداة داخل المساحة الخاصة بك (n, s, e, w, center، وما إلى ذلك).
  • يوسع: منطقي (0/1) بحيث تشغل الأداة المساحة المتوفرة.
  • يملأ: كيفية التوسع (x, y, both, none).
  • ipadx/ipady, padx/pady: الحشو الداخلي/الخارجي بالبكسل.
  • جانب: الموضع بالنسبة للحاوية (left, right, top, bottom).

كيفية عمل الأحداث وعمليات الاستدعاء في Tkinter

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

على سبيل المثال، لتغيير لون الخلفية للأداة عند تحريك المؤشر عليها:

def cambiar_color(evento):
    etiqueta.config(bg='yellow')

etiqueta.bind('', cambiar_color)

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

المتغيرات المرتبطة بالأدوات: التحكم ثنائي الاتجاه

تتيح لك بعض الأدوات ربط قيمها بمتغيرات Tkinter خاصة، مما يُسهّل مزامنة البيانات بين الواجهة ومنطق الكود لديك. هذه المتغيرات (StringVar, IntVar, DoubleVar, BooleanVar) تسمح لأي تغييرات تطرأ عليها بأن تنعكس تلقائيًا في الأداة والعكس صحيح.


texto_usuario = tk.StringVar()
entrada = tk.Entry(root, textvariable=texto_usuario)

الأدوات الأكثر استخدامًا وخياراتها الرئيسية

ملصق

  • عرض النص أو الصور. الخيارات:نص, bg, fg, الخط, صورة.

زر

  • تشغيل إجراء باستخدام الخيار أمريمكنك أيضًا إدارة الحالة باستخدام حالة (عادي/معاق).

الإدخال (إدخال نص من سطر واحد)

  • لإدخال نص عادي. الخيارات: إظهار (بالنسبة لكلمات المرور)، احصل على(), حذف ().
  مقدمة إلى لغة C++: الدليل الشامل

النص (مربع نص متعدد الأسطر)

  • يسمح لك بعرض أو التقاط عدة أسطر. الطرق: إدراج(), احصل على(), حذف ().

زر الاختيار

  • يسمح بالاختيارات الثنائية. يتم التعامل معها عادةً باستخدام IntVar o BooleanVar.

Combobox (قائمة منسدلة مع ttk)

  • اختر خيارًا من القائمة. إنه جزء من الوحدة. ttk.

الخيارات المتقدمة والتخصيص في Tkinter

إعدادات الخيار

يمكن تعديل مظهر وسلوك عناصر واجهة المستخدم أثناء إنشائها وما بعدها. يمكنك تمرير الوسائط باستخدام الكلمات المفتاحية، أو التعامل مع أسماء الخيارات كفهارس قاموس، أو استخدام الطريقة config()لتوسيع معرفتك بالواجهات الرسومية، يمكنك التحقق من كيفية عملها ما هي واجهة المستخدم الرسومية وكيف تعمل؟.


boton = tk.Button(root, text="Enviar", fg="white", bg="blue")
boton.config(state="disabled")

راجع صفحات دليل Tk للاطلاع على الخيارات القياسية والخاصة بالأدوات. يمكنك أيضًا معرفة الخيارات التي تدعمها الأدوات باستخدام widget.config() o widget.keys().

أنواع البيانات للخيارات

يمكن أن تكون الخيارات من نوع اللون (حسب الاسم أو القيمة السداسية العشرية)، أو منطقية (0/1، نعم/لا)، أو الخط ({Arial 12 bold})، مسافة (10 o 5c للسنتيمترات)، وغيرها الكثير. تختلف الأنواع حسب وظيفة الأداة وطبيعة الخيار. لفهم المفاهيم ذات الصلة بشكل أفضل، يمكنك زيارة واجهة سطر الأوامر والتحكم في النص.

النوافذ والإدارة متعددة المستويات

يُسهّل Tkinter إنشاء نوافذ فرعية إضافية لعرض الحوارات أو النماذج الفرعية أو الرسائل. استخدم الفئة Toplevel إنشاء نوافذ جديدة مستقلة عن النافذة الرئيسية.


def abrir_secundaria():
    secundaria = tk.Toplevel(root)
    secundaria.title("Ventana secundaria")
    tk.Label(secundaria, text="¡Soy una ventana hija!").pack()

الصور والوسائط المتعددة في Tkinter

أصبح عرض الصور ممكنًا بفضل الفصول الدراسية PhotoImage y BitmapImageيمكنك تحميل ملفات PNG، GIF، PGM، أو PPM (PNG فقط منذ الإصدار 8.6 من Tk). لمزيد من المعلومات التفصيلية حول الواجهة الرسومية، راجع أيضًا ما هو Wazuh؟.


img = tk.PhotoImage(file="ruta/a/imagen.png")
etiqueta = tk.Label(root, image=img)
etiqueta.pack()

هام: يجب عليك الاحتفاظ بمرجع للصورة في متغير بايثون أثناء ظهور التسمية على الشاشة وإلا ستختفي.

إدارة النوافذ وإدارتها

استخدم أساليب مثل title(), geometry(), iconphoto() y protocol() للتحكم في المظهر والعنوان والأيقونات والسلوك عند إغلاق النافذة. يمكنك أيضًا زيارة كيفية التحقق من درجة حرارة وحدة المعالجة المركزية في نظام التشغيل Windows 11 لفهم جوانب أداء جهاز الكمبيوتر الخاص بك بشكل أفضل عند تطوير التطبيقات الرسومية.

القيادة wm تتم ترجمة Tk's إلى أساليب الفئة Wm في Tkinter، مما يسمح لك بالتحكم بشكل عميق في خصائص النافذة من البرنامج النصي Python الخاص بك.

خيارات عملية لتطوراتك

إذا كنت تريد إنشاء تطبيقات وظيفية من الصفر، فإن الخطوات الأساسية هي:

  • استيراد Tkinter
  • إنشاء النافذة الرئيسية
  • أضف أدوات مثل العلامات والأزرار ومدخلات النص…
  • تنظيم الأدوات باستخدام مدير الهندسة (pack, grid...)
  • تعيين الأحداث وعمليات الاسترجاع حسب الحاجة
  • تخصيص مظهر ووظائف الأدوات
  • تنفيذ الحلقة الرئيسية

مثال عملي: الآلة الحاسبة الأساسية

import tkinter as tk
from tkinter import messagebox

operacion = ""
def click_boton(valor):
    global operacion
    if valor == "=":
        try:
            resultado = eval(operacion)
            entrada.set(resultado)
            operacion = str(resultado)
        except Exception:
            messagebox.showerror("Error", "Operación inválida")
            operacion = ""
            entrada.set("")
    elif valor == "C":
        operacion = ""
        entrada.set("")
    else:
        operacion += str(valor)
        entrada.set(operacion)

ventana = tk.Tk()
ventana.title("Calculadora")
ventana.geometry("400x400")
ventana.resizable(False, False)
entrada = tk.StringVar()

campo_texto = tk.Entry(ventana, textvariable=entrada, font=("Arial", 20), justify="right", bd=10)
campo_texto.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

botones = 
fila = 1
columna = 0
for boton in botones:
    tk.Button(
        ventana,
        text=boton,
        font=("Arial", 18),
        width=5,
        height=2,
        command=lambda b=boton: click_boton(b)
    ).grid(row=fila, column=columna, padx=5, pady=5)
    columna += 1
    if columna > 3:
        columna = 0
        fila += 1

ventana.mainloop()

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

  أفضل البدائل للغة COBOL ومستقبلها في البرمجة

الخيوط والعمليات الفرعية ونموذج الحدث في Tkinter

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

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

الممارسات الجيدة والموارد المفيدة

  • احرص على إبقاء منطق العمل منفصلاً عن الواجهة الرسومية لتسهيل الصيانة.
  • إذا كانت لديك أسئلة حول خيارات الأداة، استخدم widget.config() للتحقق من التكوين المتاح.
  • يرجى الرجوع إلى وثائق Python الرسمية وصفحات Tk man للحصول على تفاصيل محددة.
  • فكر في استخدام الوحدة ttk لمزيد من الواجهات الحديثة ودعم السمات.
واجهة المستخدم الرسومية
مقالة ذات صلة:
ما هي واجهة المستخدم الرسومية وكيف تعمل؟

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