"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية مشاركة البيانات بين النافذة الرئيسية والخيوط في PyQt: المرجع المباشر مقابل الإشارات والفتحات؟

كيفية مشاركة البيانات بين النافذة الرئيسية والخيوط في PyQt: المرجع المباشر مقابل الإشارات والفتحات؟

تم النشر بتاريخ 2024-11-06
تصفح:446

How to Share Data Between the Main Window and Threads in PyQt: Direct Reference vs. Signals and Slots?

مشاركة البيانات بين النافذة الرئيسية والخيط في PyQt

غالبًا ما تحتاج التطبيقات متعددة الخيوط إلى مشاركة البيانات بين خيط النافذة الرئيسية وخيوط العامل. لضمان سلامة الخيط والتواصل المناسب، تقدم PyQt العديد من الأساليب العملية.

الخيار 1: إشارة مباشرة إلى النافذة الرئيسية

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

class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker(self)
        # ...

class Worker(QtCore.QThread):
    def __init__(self, host_window):
        super(Worker, self).__init__()
        self.host = host_window
        # ...

الخيار 2: الإشارات والفتحات يستخدم PyQt الإشارات والفتحات للتواصل بين الكائنات. في هذا الأسلوب، يرسل مؤشر ترابط العامل إشارات عندما تتغير البيانات، وتتعامل وظائف فتحة النافذة الرئيسية مع التحديثات.

class MainWindow(QtGui.QWidget): تعريف __init__(الذات): #... self.worker = عامل () self.worker.beep.connect(self.update) #... عامل الفصل (QtCore.QThread): صوت تنبيه = QtCore.pyqtSignal(int) تعريف __init__(الذات): سوبر (عامل، ذاتي).__init__() # ...
class MainWindow(QtGui.QWidget):
    def __init__(self):
        # ...
        self.worker = Worker()
        self.worker.beep.connect(self.update)
        # ...

class Worker(QtCore.QThread):
    beep = QtCore.pyqtSignal(int)

    def __init__(self):
        super(Worker, self).__init__()
        # ...
ما هو الخيار الذي يجب استخدامه؟

يعتمد الاختيار على احتياجات الخيط ومستوى التحكم المطلوب.

    يوفر الخيار 1
  • وصولاً مباشرًا إلى بيانات النافذة الرئيسية ولكن قد لا يكون قابلاً للتطوير لمشاركة بيانات أكثر تعقيدًا.
  • يضمن الخيار 2
  • سلامة سلسلة الرسائل ويدعم اتصالات أكثر مرونة الأنماط.
اعتبارات سلامة الموضوع

الأدوات ليست آمنة للخيوط. لذلك، من الضروري استخدام الإشارات والفتحات للتعامل مع الاتصال بين الخيط والنافذة الرئيسية. يمكن أن يؤدي التلاعب المباشر بالأدوات من عدة سلاسل إلى سلوك غير متوقع.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3