إعادة ضبط نافذة واجهة المستخدم الرسومية الرئيسية

StackOverflow https://stackoverflow.com/questions/731887

  •  06-09-2019
  •  | 
  •  

سؤال

أريد فقط ما يعادل إغلاق البرنامج الرئيسي وإعادة فتحه. أريد استدعاء ذلك عند النقر فوق خيار "جديد" من قائمة منسدلة. شيء مثل الدعوة Root.Destroy () ثم إعادة بدء تشغيل Mainloop.

كيف يمكنني القيام بذلك؟

هل كانت مفيدة؟

المحلول

يمكنك أن تأخذ كل ما تبذلونه من منطق بناء واجهة المستخدم الرسومية وكود الحالة الأولية خارج Mainloop ووضعه في وظائف. اتصل بهذه الوظائف من Mainloop (شيء مثل: BuildGui () & InitState ()) وبعد ذلك، عندما ينقر المستخدم على أيقونة القائمة، ما عليك سوى استدعاء initstate () لتعيينه مرة أخرى كما كان عند بدء تشغيل التطبيق أولا.

نصائح أخرى

هناك ثلاث طرق على الأقل يمكنك حلها.

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

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

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

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

إذا كنت على UNIX، أعد تشغيل التطبيق بأكمله باستخدام OS.EXECV. تأكد من تمرير جميع حجج سطر الأوامر وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top