लक्ष्य: जब मैं क्लिक करता हूं तो स्विच विजेट पर क्लिक जारी करता हूं, यह मुझे रिलीज पर एक घटना को सक्रिय करता है।

समस्या: मैंने इस्तेमाल किया on_touch_down() स्विच विधि लेकिन:

  • यह क्लिक के रिलीज होने पर 2 इवेंट रिलीज करता है और केवल एक ही नहीं।
  • जब मैं रिलीज करता हूं और यह "ऑफ" दिखाता है, तो यह "ट्रू" कहता है और यह "गलत" दिखाता है जब यह "चालू" होता है!
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout


KV = '''
MyGridLayout:
    Switch:
        id: switch_ecs
        on_touch_up:
            root.on_switch("ecs")
'''

class MyGridLayout(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def on_switch(self,element_id):
        print(self.ids["switch_" + element_id].active)

class MyApp(MDApp):
    def build(self):
        self.screen = Builder.load_string(KV)
        return self.screen



if __name__ == '__main__':
    MyApp().run()
0
user14234656 4 जिंदा 2021, 12:57

1 उत्तर

सबसे बढ़िया उत्तर

किवी के पास कुछ अस्पष्ट तर्क हैं जिसके परिणामस्वरूप कुछ विजेट्स (जैसे Buttons और Switches) को दो बार टच अप ईवेंट भेजे जाते हैं। आपके कोड का समाधान यह है कि आप अपनी on_switch() विधि के लिए किसी भिन्न ट्रिगर का उपयोग करें। आप उपयोग कर सकते हैं:

    on_touch_down:
        root.on_switch("ecs")

या:

    on_active:
        root.on_switch("ecs")
0
John Anderson 4 जिंदा 2021, 17:37
"अस्पष्ट तर्क" और तार्किक व्यवहार मेरे लिए एक बग की तरह नहीं लगता है: / लेकिन उत्तर के लिए धन्यवाद! on_active ठीक वही करें जो मुझे चाहिए ! मुझे नहीं पता कि उन्होंने यहां डॉक्टर पर इस विधि को सटीक क्यों नहीं बताया kivy.org/doc/stable/api-kivy.uix.switch.html
 – 
user14234656
4 जिंदा 2021, 17:58