"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PyQt में मुख्य विंडो और थ्रेड्स के बीच डेटा कैसे साझा करें: डायरेक्ट रेफरेंस बनाम सिग्नल और स्लॉट?

PyQt में मुख्य विंडो और थ्रेड्स के बीच डेटा कैसे साझा करें: डायरेक्ट रेफरेंस बनाम सिग्नल और स्लॉट?

2024-11-06 को प्रकाशित
ब्राउज़ करें:647

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):
    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