اذهب إلى المحتوى

السؤال

نشر

السلام عليكم...
تظهر رسالة الخطأ RuntimeError: main thread is not in main loop  (صورة 1 ) ، عند تنفيذ main  ( صورة 2) ، و السبب في ذلك هو هذا السطر المسؤول عن إظهار بيانات  treeview في الخانات على قاعدة البيانات ( صورة 3) .
فعند تعطيل هذا السطر ( صورة 4) ، ينفذ التطبق عادي و لا تظهر أية رسالة خطأ  ( صورة 5)، و لكن المشكل عند الضغط  على بيانات موظف ما الموجودة في treeview للإظهاره في خانات قاعدة البيانات ( صورة 6) ( الشريط الأحمر ) ، لا تنفذ؟

1.png

2.png

3.png

4.png

5.png

6.png

Recommended Posts

  • 0
نشر

أنت تحاول استخدام Thread للتعامل مع تحديث واجهة Tkinter (treeview) لكن Tkinter غير آمن للتعامل مع Threads (thread-safe) ويجب أن تتم جميع عمليات واجهة المستخدم في الـ main thread لذا أقترح أن تقوم بتعديل الكود لاستخدام after method من Tkinter بدلا من Thread وهذا سيسمح بتحديث واجهة المستخدم بشكل آمن لذا يجب إزالة استخدام Thread واستبداله بـ root.after() وتنفيذ تحديثات واجهة المستخدم في الـ main thread لذا استبدل السطر التالي:

self.selectalldata = Thread(target=self.class_treeview.select_data, args=()).start()

بهذا السطر:

self.root.after(10, self.class_treeview.select_data)

وتأكد من أن select_data تستخدم after لتحديث واجهة المستخدم:

def select_data(self):
    data = self.get_cursor()
    self.root.after(10, self.update_treeview_with_data, data)
  • 0
نشر
بتاريخ الآن قال ياسر مسكين:

أنت تحاول استخدام Thread للتعامل مع تحديث واجهة Tkinter (treeview) لكن Tkinter غير آمن للتعامل مع Threads (thread-safe) ويجب أن تتم جميع عمليات واجهة المستخدم في الـ main thread لذا أقترح أن تقوم بتعديل الكود لاستخدام after method من Tkinter بدلا من Thread وهذا سيسمح بتحديث واجهة المستخدم بشكل آمن لذا يجب إزالة استخدام Thread واستبداله بـ root.after() وتنفيذ تحديثات واجهة المستخدم في الـ main thread لذا استبدل السطر التالي:

self.selectalldata = Thread(target=self.class_treeview.select_data, args=()).start()

بهذا السطر:

self.root.after(10, self.class_treeview.select_data)

وتأكد من أن select_data تستخدم after لتحديث واجهة المستخدم:

def select_data(self):
    data = self.get_cursor()
    self.root.after(10, self.update_treeview_with_data, data)

السلام عليكم ...

أشكرك جزيل الشكر على مجهودك القيّم .

 لقد إكتشفت الخطأ و هو يكمن في القوسين الأخيرين في السطر ( صورة 1).

فعند حذفهما أصبح البرنامج ينفذ بسلاسة و لا تظهر أية رسالة خطأ  (صورة 2 و 3)

و عند النقر مرة واحدة على أي  موظف في treeview ، تظهر مباشرة بياناته في الحقول ( صورة 4 ).

1.png

2.png

3.png

4.png

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...