对不起我的基本问题,但我一直在寻找答案一小时无济于事。
这是我的基本代码:
class LoginScreen(Screen):
def __init__(self,**kwargs):
super(LoginScreen,self).__init__(**kwargs)
l = BoxLayout(orientation='vertical')
sound_btn = Button(text="Play Sound", font_size = 300)
word_bx = TextInput(multiline=False,hint_text='type here...',font_size=300)
submit_btn = Button(text = 'Submit', font_size=300)
submit_btn.bind(on_press = self.submitAction)
l.add_widget(sound_btn)
l.add_widget(word_bx)
l.add_widget(submit_btn)
self.add_widget(l)
def submitAction(self,*args):
if self.word_bx.text == KivyApp.word:
KivyApp.point+=1
self.word_bx.text=""
KivyApp.i +=1
print(KivyApp.point)
正如您所看到的,在submitAction函数中我想引用word_bx小部件,但这会引发一个错误,指出Class LoginPage没有属性word_bx。然后我试图将'ids'置于自我面前,但这会引发另一个错误。我究竟做错了什么?对不起我的无能......
答案 0 :(得分:1)
这些行
word_bx = TextInput(multiline=False,hint_text='type here...',font_size=300)
...
l.add_widget(word_bx)
将word_bx
定义为临时变量。在__init__()
退出后,它不可用。如果您希望它是持久的,以便您可以从其他方法访问它,则需要使其成为该类的成员。
self.word_bx = TextInput(multiline=False,hint_text='type here...',font_size=300)
...
l.add_widget(self.word_bx)
然后就行了
self.word_bx.text=""
<{1}}中的将引用实际存在的内容。
答案 1 :(得分:0)
我使用Lambda修复它并使该函数在类外部:
def submitAction(text):
if text == KivyApp.word:
KivyApp.point+=1
KivyApp.i +=1
print(KivyApp.point)
class LoginScreen(Screen):
def __init__(self,**kwargs):
super(LoginScreen,self).__init__(**kwargs)
l = BoxLayout(orientation='vertical')
sound_btn = Button(text="Play Sound", font_size = 300)
word_bx = TextInput(multiline=False,hint_text='type here...',font_size=300)
submit_btn = Button(text = 'Submit', font_size=300)
submit_btn.bind(on_press = lambda *a:submitAction(word_bx.text))
l.add_widget(sound_btn)
l.add_widget(word_bx)
l.add_widget(submit_btn)
self.add_widget(l)