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__()
# ...
किस विकल्प का उपयोग करें?
विकल्प थ्रेड की जरूरतों और आवश्यक नियंत्रण के स्तर पर निर्भर करता है।
थ्रेड सुरक्षा संबंधी विचार
विजेट थ्रेड-सुरक्षित नहीं हैं। इसलिए, थ्रेड और मुख्य विंडो के बीच संचार को संभालने के लिए सिग्नल और स्लॉट का उपयोग करना महत्वपूर्ण है। एकाधिक थ्रेड से विजेट के सीधे हेरफेर से अप्रत्याशित व्यवहार हो सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3