يوفر عنصر واجهة المستخدم Button
في مكتبة Tkinter طريقة بسيطة لتحريك الأفعال، ولكنك ستحتاج غالبًا إلى تمرير البيانات إلى الدالة التي ينفذها الزر. تستعرض هذه المقالة تقنيتين فعالتين لتحقيق ذلك: استخدام functools.partial
ودوال لامدا.
محتويات
تمرير الوسائط باستخدام functools.partial
توفر دالة functools.partial
حلاً نظيفًا وسهل القراءة لملء الوسائط مسبقًا للدالة القابلة للتنفيذ. هذا مفيد بشكل خاص عندما تريد تجنب إنشاء دوال متعددة تختلف فقط في و سائطها.
لنفكر في دالة تعرض تحية شخصية:
import tkinter as tk
from functools import partial
def greet(name, message):
print(f"Hello, {name}! {message}")
root = tk.Tk()
# إنشاء أزرار باستخدام partial
button1 = tk.Button(root, text="Greet Alice", command=partial(greet, "Alice", "Welcome!"))
button1.pack()
button2 = tk.Button(root, text="Greet Bob", command=partial(greet, "Bob", "How are you doing?"))
button2.pack()
root.mainloop()
هنا، partial(greet, "Alice", "Welcome!")
ينشئ دالة قابلة للتنفيذ جديدة، والتي عند تنفيذها، تستدعي greet
مع “Alice” و “Welcome!” كوسائط مُعبأة مسبقًا. هذا يبسط إنشاء الأزرار ويحسن قابلية قراءة الكود.
تمرير الوسائط باستخدام دوال لامدا
توفر دوال لامدا، أو الدوال المجهولة، بديلاً أكثر إيجازًا. ومع ذلك، بالنسبة للمنطق المعقد، يمكن أن تقلل من قابلية القراءة.
دعونا نراجع مثال التحية باستخدام دوال لامدا:
import tkinter as tk
def greet(name, message):
print(f"Hello, {name}! {message}")
root = tk.Tk()
button1 = tk.Button(root, text="Greet Alice", command=lambda: greet("Alice", "Welcome!"))
button1.pack()
button2 = tk.Button(root, text="Greet Bob", command=lambda: greet("Bob", "How are you doing?"))
button2.pack()
root.mainloop()
lambda: greet("Alice", "Welcome!")
ينشئ دالة مجهولة تستدعي greet
مباشرةً مع الوسائط المحددة. على الرغم من إيجازها، إلا أن هذا النهج قد يصبح أقل قابلية للصيانة مع زيادة تعقيد دالة لامدا.
اختيار الطريقة المناسبة
تُمرر كل من functools.partial
ودوال لامدا الوسائط بشكل فعال إلى أوامر أزرار Tkinter. functools.partial
توفر بشكل عام قابلية قراءة أفضل، خاصة في السيناريوهات البسيطة. توفر دوال لامدا إيجازًا، لكنها قد تُضر بقابلية القراءة في المواقف الأكثر تعقيدًا. أعطي الأولوية لوضوح الكود وقابلية صيانته عند اختيار الطريقة المناسبة. بالنسبة لتمرير الوسائط البسيط، غالبًا ما يُفضل استخدام functools.partial
.