我使用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中的文档一样,可以添加自定义事件。
答案 0 :(得分:2)
肯定会在kivy解析器中抛出错误,这表明错误在您尝试加载的字符串中。它看起来像字符串中的缩进问题。
如果示例来自here,那么GitHub代码格式化程序可能隐藏的代码段中的缩进级别混合就会出现问题。如果您的缩进与该页面上的缩进类似,请尝试复制您在此处格式化的代码段,并查看是否可以修复问题。
答案 1 :(得分:0)
例外名称建议current_property
为None
,您应该环顾四周。顺便说一句,为什么你的活动名称为'on_reponse_user'
?它应该不是on_reSponse_user
吗?如果该字符串除了名称之外在Kivy中具有一定的意义,那么这可能是您问题的根源。
答案 2 :(得分:0)
我在笔记本电脑中也面临着相同的问题,但是当我在android中尝试相同的代码时,它的运行正常。 只需使用kivy启动器和python在android中尝试此代码
答案 3 :(得分:0)