بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
التفاعل مع عناصر Gtk من خلال Thread مختلف.
في Gtk إذا كنت تعمل من Thread أخر وحتى لا ينكسر البرنامج أثناء عمله ويتوقف , إذا أردت تغير أي شيء خاص بعناصر Gtk بشكل بسيط عليك إذا صح التعبير طلب الأمر بشكل أمن من خلال مثلا GLib.idle_add .
مثال في هذه الصورة أنا إستخدمت subprocess لتنفيذ امر ياخذ وقت والذي هو تحديث قائمة محمل الإقلاع و subprocess.call ستعمل block لحلقة تكرار البرنامج مما يأدي لتوقف واجهة البرنامج حتى تنتهي وقد يحذرك نظام التشغيل أن البرنامج الفلاني عالق هي تريد إقافه بالقوة أو الإنتظار ؟
المهم ليس من الجيد أن يحصل هذا لهذا يجب تشغيل هذا الامر في Thread أخر عن الذي تعمل منه حلقة التكرار Gtk.main أي حلقة تكرار البرنامج .
مثلا في هذا البرنامج نفذت subprocess.call ب Thread أخر وطلبت قبل بدأ التنفيذ تشغيل spinner وبعد الإنتهاء من تشغيله إقاف هذه ال spinner (ال spinner عبارة عن عنصر رسومي يستخدم مثلا لإظهار أن البرنامج يعمل شيء ما مثل ال loading )
الان بما أننا نعمل من Thread أخر يجب إستخدام كما قلت شيء مثل GLib.idle_add بدل تنفيذ Method أو ظيفة start و stop بشكل صريح كما وضعته في التعليق باللون الأزرق .
ملاحظة يوجد في subprocess دوال أو كلاسات لا تعمل block مثل Popen لاكن إستخدمت call للتوضيح .