我试图使用Dynamic Class使我的Kivy应用程序中的所有文本输入都通过同一个验证回调。下面是示例代码:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
kv = '''
<smRoot>:
SignUpScreen:
<signupText@TextInput>:
font_size: '15sp'
on_text_validate: app.callback1()
multiline: False
<SignUpScreen>:
font_size:'50sp'
name:'signupscreen'
canvas:
Color:
rgb: (0.09,0.65,0.8)
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
size_hint: (.75, .5)
pos_hint: {'center_x': .5, 'center_y': .5}
orientation: 'vertical'
signupText:
hint_text: 'Full Name'
signupText:
hint_text: 'Mobile Number'
signupText:
hint_text: 'Enter Password'
signupText:
hint_text: 'Re-Enter Password'
Button:
text: 'Sign Up'
disabled: True
'''
Builder.load_string(kv)
class smRoot(ScreenManager):
pass
class SignUpScreen(Screen):
pass
class myApp(App):
def build(self):
smroot = smRoot()
return smroot
def callback1(self):
print 'In Validation Callback'
if __name__ == '__main__':
myApp().run()
这将引发以下错误:
^{pr2}$然而令人惊讶的是,当我只将signupText
类的第一个实例更改为父TextInput
时,它可以工作:
BoxLayout:
size_hint: (.75, .5)
pos_hint: {'center_x': .5, 'center_y': .5}
orientation: 'vertical'
TextInput:
hint_text: 'Full Name'
signupText:
hint_text: 'Mobile Number'
signupText:
hint_text: 'Enter Password'
signupText:
hint_text: 'Re-Enter Password'
Button:
text: 'Sign Up'
disabled: True
有了这个小小的改变,语法错误就不再抛出了。当然,在这种情况下,回调只对最后三个文本输入框起作用。。。!在
Kivy是不是在某种程度上要求父类在动态类继承之前实例化一次?或者我的代码有错误吗?在此方面,如有任何帮助/建议/建议,将不胜感激。。。!在
在Kv语言中,小部件名称必须以大写字母开头。在
您必须将
signupText
命名为SignupText
。见How to duplicate blocks of widgets in kv file (lowercase-only rule)相关问题 更多 >
编程相关推荐