我使用Kivy 1.8.0,尝试使用自定义事件来管理yesNo弹出窗口。可以在互联网上找到此代码。我仅找到此示例,并且想要修改此代码以进行多个弹出窗口管理,但是运行它时出现错误。

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout
from kivy.uix.popup import Popup
from kivy.properties import StringProperty

Builder.load_string('''
<ConfirmPopup>:
    cols: 1
        Label:
            text: root.text
        GridLayout:
            cols: 2
            size_hint_y: None
            height: '44sp'
            Button:
                text: 'Yes'
                on_release: root.dispatch('on_reponse_user','yes')
            Button:
                text: 'No'
                on_release: root.dispatch('on_reponse_user', 'no')
''')

我不知道问题出在kv的字符串中还是在代码中。
class ConfirmPopup(GridLayout):
    text = StringProperty('')

    def __init__(self,**kwargs):
        self.register_event_type('on_reponse_user')
        super(ConfirmPopup,self).__init__(**kwargs)

    def on_reponse_user(self, instance, answer):
        pass


class PopupTest(App):
    def build(self):
        content = ConfirmPopup(text='Do You Love Kivy?')
        content.bind(on_reponse_user=self.on_answer_callback)
        self.popup = Popup(title="Answer Question",
                           content=content,
                           size_hint=(None, None),
                           size=(480,400),
                           auto_dismiss= False)
        self.popup.open()

    def on_answer_callback(self, instance, answer):
        print("USER ANSWER: " , repr(answer))
        self.popup.dismiss()

if __name__ == '__main__':
    PopupTest().run()

当我运行此代码时,出现以下错误:
 Traceback (most recent call last):
   File "F:\Kivy-1.8.0\test_event.py", line 24, in <module>
     ''')
   File "F:\Kivy-1.8.0\kivy\kivy\lang.py", line 1491, in load_string
     parser = Parser(content=string, filename=fn)
   File "F:\Kivy-1.8.0\kivy\kivy\lang.py", line 1049, in __init__
     self.parse(content)
   File "F:\Kivy-1.8.0\kivy\kivy\lang.py", line 1122, in parse
     objects, remaining_lines = self.parse_level(0, lines)
   File "F:\Kivy-1.8.0\kivy\kivy\lang.py", line 1271, in parse_level
     if current_property[:3] == 'on_':
 TypeError: 'NoneType' object is not subscriptable

我不知道为什么自定义事件出错。像Kivy中的文档一样,可以添加自定义事件。

最佳答案

该错误肯定会在kivy解析器中引发,这表明该错误在您尝试加载的字符串中。它看起来像字符串中的缩进问题。

如果该示例取自here,则该代码段中的缩进级别混合可能会有些奇怪,GitHub代码格式化程序可能会隐藏该代码。如果您的缩进类似于该页面上的缩进,请尝试完全按照此处的格式复制已发布的代码段,然后查看是否可以解决问题。

10-08 08:10