بناء تطبيق GUI باستخدام Python و Tkinter: دليل شامل للمبتدئين

Amine
03/09/2024

مقدمة إلى بناء تطبيق GUI باستخدام Python و Tkinter

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

الجزء 1: إعداد بيئة التطوير

1.1: تثبيت Python و Tkinter

أولاً، تحتاج إلى تثبيت Python. يمكنك تنزيل Python من الموقع الرسمي لـ Python. يأتي Tkinter مثبتًا مع معظم توزيعات Python الحديثة، ولكن يمكنك التحقق من توفره باستخدام الأمر التالي:

python -m tkinter

إذا ظهرت نافذة GUI، فهذا يعني أن Tkinter مثبت بشكل صحيح. إذا لم يكن مثبتًا، يمكنك تثبيته باستخدام مدير الحزم المناسب لنظام التشغيل الخاص بك.

الجزء 2: إنشاء تطبيق GUI بسيط

2.1: إنشاء نافذة بسيطة

لنبدأ بإنشاء نافذة GUI بسيطة باستخدام Tkinter:


import tkinter as tk

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("تطبيق GUI بسيط")
root.geometry("300x200")

# بدء الحلقة الرئيسية
root.mainloop()

في هذا المثال، قمنا بإنشاء نافذة رئيسية باستخدام tk.Tk() وضبط عنوان وحجم النافذة. ثم قمنا بتشغيل الحلقة الرئيسية باستخدام root.mainloop()، وهي ضرورية للحفاظ على تشغيل التطبيق.

2.2: إضافة عناصر واجهة المستخدم (Widgets)

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


import tkinter as tk

def on_button_click():
    label.config(text="تم النقر على الزر!")

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("تطبيق GUI بسيط")
root.geometry("300x200")

# إضافة تسمية
label = tk.Label(root, text="مرحبًا بك في تطبيق Tkinter!")
label.pack(pady=10)

# إضافة زر
button = tk.Button(root, text="انقر هنا", command=on_button_click)
button.pack(pady=10)

# بدء الحلقة الرئيسية
root.mainloop()

في هذا المثال، أضفنا تسمية باستخدام tk.Label وزر باستخدام tk.Button. عندما يتم النقر على الزر، يتم استدعاء الدالة on_button_click، التي تقوم بتحديث نص التسمية.

الجزء 3: التعامل مع الأحداث في Tkinter

3.1: فهم نظام الأحداث في Tkinter

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

3.2: إنشاء معالجات الأحداث (Event Handlers)

يمكنك إنشاء معالجات الأحداث باستخدام دوال مخصصة. لنقم بإنشاء تطبيق يتعامل مع إدخال النص من المستخدم:


import tkinter as tk

def on_button_click():
    user_text = entry.get()
    label.config(text=f"مرحبًا، {user_text}!")

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("تطبيق GUI بسيط")
root.geometry("300x200")

# إضافة تسمية
label = tk.Label(root, text="أدخل اسمك:")
label.pack(pady=10)

# إضافة مربع إدخال
entry = tk.Entry(root)
entry.pack(pady=10)

# إضافة زر
button = tk.Button(root, text="إرسال", command=on_button_click)
button.pack(pady=10)

# بدء الحلقة الرئيسية
root.mainloop()

في هذا المثال، أضفنا مربع إدخال tk.Entry يسمح للمستخدم بإدخال النص. عند النقر على الزر، يتم استدعاء الدالة on_button_click التي تقرأ نص الإدخال وتعرض رسالة ترحيب.

الجزء 4: التفاعل مع ملفات النظام

4.1: فتح وحفظ الملفات باستخدام Tkinter

يمكنك استخدام Tkinter لفتح وحفظ الملفات باستخدام مكتبة filedialog. إليك كيفية فتح ملف نصي وعرض محتواه في مربع نص:


import tkinter as tk
from tkinter import filedialog

def open_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    if file_path:
        with open(file_path, "r") as file:
            content = file.read()
            text_area.delete(1.0, tk.END)
            text_area.insert(tk.END, content)

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("محرر نصوص بسيط")
root.geometry("400x300")

# إضافة مربع نص
text_area = tk.Text(root)
text_area.pack(expand=True, fill=tk.BOTH)

# إضافة زر فتح ملف
open_button = tk.Button(root, text="فتح ملف", command=open_file)
open_button.pack(pady=5)

# بدء الحلقة الرئيسية
root.mainloop()

يستخدم هذا المثال مكتبة filedialog لفتح مربع حوار يتيح للمستخدم اختيار ملف نصي. يتم عرض محتوى الملف في مربع النص tk.Text.

الجزء 5: التكامل مع قواعد البيانات

5.1: الاتصال بقاعدة بيانات SQLite

يمكنك استخدام مكتبة sqlite3 المدمجة في Python للاتصال بقاعدة بيانات SQLite وتنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف). لنقم بإنشاء تطبيق بسيط يدير جهات الاتصال باستخدام قاعدة بيانات SQLite:


import tkinter as tk
import sqlite3

# إنشاء قاعدة بيانات واتصال
conn = sqlite3.connect('contacts.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS contacts (id INTEGER PRIMARY KEY, name TEXT, phone TEXT)''')

def add_contact():
    name = entry_name.get()
    phone = entry_phone.get()
    c.execute("INSERT INTO contacts (name, phone) VALUES (?, ?)", (name, phone))
    conn.commit()
    entry_name.delete(0, tk.END)
    entry_phone.delete(0, tk.END)
    display_contacts()

def display_contacts():
    c.execute("SELECT * FROM contacts")
    contacts = c.fetchall()
    listbox.delete(0, tk.END)
    for contact in contacts:
        listbox.insert(tk.END, f"{contact[1]} - {contact[2]}")

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("إدارة جهات الاتصال")
root.geometry("400x300")

# إضافة مربع إدخال للاسم
tk.Label(root, text="الاسم:").pack(pady=5)
entry_name = tk.Entry(root)
entry_name.pack(pady=5)

# إضافة مربع إدخال للهاتف
tk.Label(root, text="الهاتف:").pack(pady=5)
entry_phone = tk.Entry(root)
entry_phone.pack(pady=5)

# إضافة زر لإضافة جهة اتصال
add_button = tk.Button(root, text="إضافة جهة اتصال", command=add_contact)
add_button.pack(pady=10)

# إضافة قائمة لعرض جهات الاتصال
listbox = tk.Listbox(root)
listbox.pack(expand=True, fill=tk.BOTH)

# عرض جهات الاتصال الموجودة
display_contacts()

# بدء الحلقة الرئيسية
root.mainloop()

# إغلاق الاتصال بقاعدة البيانات عند إغلاق التطبيق
conn.close()

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

الجزء 6: تخصيص واجهة المستخدم في Tkinter

6.1: تخصيص الأنماط باستخدام tkinter.ttk

يوفر Tkinter مكتبة ttk (Themed Tkinter Widgets) التي تقدم عناصر واجهة مستخدم حديثة. يمكنك استخدام ttk لتحسين مظهر تطبيقك:


import tkinter as tk
from tkinter import ttk

# إنشاء نافذة رئيسية
root = tk.Tk()
root.title("تطبيق GUI مع ttk")
root.geometry("300x200")

# إضافة زر ttk
button = ttk.Button(root, text="زر TTK")
button.pack(pady=10)

# إضافة مربع إدخال ttk
entry = ttk.Entry(root)
entry.pack(pady=10)

# إضافة شريط تقدم ttk
progress = ttk.Progressbar(root, orient='horizontal', length=200, mode='determinate')
progress.pack(pady=10)

# بدء الحلقة الرئيسية
root.mainloop()

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

الجزء 7: إضافة أنماط CSS إلى Tkinter باستخدام tkhtmlview

7.1: استخدام tkhtmlview لدمج HTML/CSS في تطبيق Tkinter

لإضافة أنماط CSS أو تضمين HTML في تطبيق Tkinter، يمكنك استخدام مكتبة tkhtmlview:

pip install tkhtmlview

ثم يمكنك استخدام HTMLLabel لعرض المحتوى المنسق:


from tkinter import Tk
from tkhtmlview import HTMLLabel

root = Tk()
root.title("تطبيق GUI مع HTML/CSS")
root.geometry("400x200")

html_content = """
<h1>مرحبًا بكم في Tkinter!</h1>
<p style='color: blue;'>هذا مثال على نص منسق باستخدام HTML/CSS.</p>
"""

label = HTMLLabel(root, html=html_content)
label.pack(pady=10)

root.mainloop()

في هذا المثال، استخدمنا HTMLLabel لعرض نص منسق باستخدام HTML وCSS.

خاتمة

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

ابقَ على اطلاع لمزيد من الدروس المتقدمة حول Tkinter وكيفية استخدامها بكفاءة في مشاريعك البرمجية.

التعليقات

اترك تعليقاً