मेरे पास एक सॉकेट क्लाइंट है जो हर बार एक संदेश प्राप्त करते समय View()
कक्षा को कॉल करता है। मैंने अपना कोड इस तरह से विभाजित कर दिया है कि इस वर्ग में बस print()
या किसी अन्य डिस्प्ले विधि का उपयोग कर सकते हैं, जैसा मुझे पसंद है। हालांकि, ऐसा लगता है कि किवी इस विधि का शौक नहीं है। मैंने अपने दृश्य के लिए Kivy की BoxLayout
कक्षा बढ़ा दी है और message()
फ़ंक्शन को कॉल कर सकते हैं। वर्ग इस तरह दिखता है:मैं थ्रेड से Kivy तत्वों को कैसे अपडेट करूं?
class View(BoxLayout):
def __init__(self, **kwargs):
super(View, self).__init__(**kwargs)
self.btn = Button(text='Default')
# Bind button press method
self.btn.bind(on_press=self.message)
self.add_widget(self.btn)
def message(self, message):
self.btn.text = 'Meow'
self.add_widget(Button(text='Meow'))
print(str(message))
संदेश समारोह वास्तव में कहा जाता है और यह प्रिंट लेकिन इंटरफ़ेस अपडेट नहीं होता। जब मैं बटन दबाता हूं, तो यह इंटरफ़ेस के साथ-साथ प्रिंट को अपडेट करता है।
मैंने बटन टेक्स्ट को संशोधित करने के लिए StringProperty
का उपयोग करने में देखा है लेकिन यह भी विफल रहा है। एक नोट के रूप में, यदि मैं जो कर रहा हूं वह पूरी तरह से अक्षम है, तो मैं बोर्ड के रूप में width * height
बटनों सहित एक संपूर्ण इंटरफ़ेस खींचने की कोशिश कर रहा हूं।
किसी भी इनपुट की बहुत सराहना की जाती है, यह मुझे पागल कर रही है।
संपादित करें 1 * मैं कुछ टिप्पणियों पर पीछा किया और कुछ चीजें बाहर की कोशिश की है। मैंने
Clock
क्लास जोड़ा है और इसे से
update()
विधि शेड्यूल किया है। अद्यतन विधि बस कुछ तत्वों के पाठ को बदल देती है। मैंने देखा है यह काम करता है जब मैं इसे करने के लिए निर्धारित करते हैं, जैसा कि नीचे दिखाया:
def update(self, *args, **kwargs):
self.btn.text = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for i in range(32))
def message(self, message):
try:
print(message)
self.text = 'sending'
except Exception as e:
print(e)
धागा अब बस पाठ संपत्ति message()
के रूप में देखा प्रदान करती है। समय-समय पर ट्रिगर update()
विधियां भी काम करती हैं, यादृच्छिक पाठ असाइन करती हैं। अब मुद्दा यह है कि यह पाठ सेट नहीं कर सकता है। यह काम नहीं करता:
def update(self, *args, **kwargs):
self.btn.text = self.text
मैं गलत कहीं और कर रही होगी, किसी भी सुझाव?
संपादित 2 * त्रुटि मैं डिबग करने के लिए कोशिश कर रहा हूँ here है।
आप मुख्यधारा के अलावा किसी थ्रेड से UI तत्व या गुणों को संशोधित नहीं कर सकते हैं। मुख्यधारा पर चलने के लिए फ़ंक्शंस शेड्यूल करने के लिए किवी '' क्लॉक'' क्लास को देखें। – bj0
@ bj0 के उत्तर के आगे, आप इस विधि को स्वचालित रूप से फ़ंक्शन पर लागू करने के लिए '@ मेनथ्रेड 'सजावट का उपयोग कर सकते हैं। – inclement
अरे, मैंने पोस्ट को और निष्कर्षों के साथ संपादित किया है।मैं मदद की सराहना करता हूं, और 'क्लॉक()' का उपयोग करने का सुझाव, जैसा ऊपर बताया गया है, यह अभी भी पूरी तरह कार्यात्मक नहीं है। – timur