في سياق برمجة واجهة المستخدم الرسومية، من الشائع أن يكون لديك صفحات متعددة داخل نافذة تطبيق واحدة. قد تحتوي كل صفحة على عناصر واجهة مستخدم مختلفة، مثل حقول الإدخال أو الأزرار أو التسميات. عند التفاعل مع هذه الأدوات، يقدم المستخدم مدخلات أو يقوم باختيارات يجب مشاركتها عبر صفحات مختلفة. وهذا يثير مسألة كيفية الوصول إلى البيانات المتغيرة من فئة إلى أخرى، خاصة عندما تمثل تلك الفئات صفحات مختلفة.
يتضمن أحد الأساليب الفعالة الاستفادة من مفهوم فئة وحدة التحكم . في مقتطف الرمز الذي قدمته، لديك فئة MyApp تدير صفحات متعددة، مثل PageOne وPageTwo. عادةً ما تعمل وحدة التحكم كوسيط بين أجزاء مختلفة من التطبيق وتسهل الاتصال. إليك كيفية استخدام وحدة التحكم للحصول على بيانات متغيرة:
أضف مرجعًا إلى وحدة التحكم في كل فئة صفحة:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
أنشئ طريقة في وحدة التحكم للحصول على مثيل صفحة حسب اسم فئتها:
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
الوصول إلى الأعضاء العامين في الصفحة المستهدفة من صفحة أخرى:
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
إنشاء بنية بيانات في وحدة التحكم لتخزين جميع البيانات المشتركة:
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
قم بتعديل كل صفحة للإشارة إلى بنية بيانات وحدة التحكم عند إنشاء عناصر واجهة المستخدم:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
الوصول إلى البيانات المشتركة من وحدة التحكم بدلاً من فئات الصفحة :
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3