2017-06-09 44 views
0

对不起,我的基本问题,但我一直在寻找一个小时的答案没有用。Kivy如何访问小部件的功能,没有KV只是python代码

这是我的基本代码:

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部件,但是,这将引发一个错误,指出类LoginPage有没有属性word_bx。然后,我试图将“自我”放在自我的前面,但又引发了另一个错误。我究竟做错了什么?对不起我的无能..

回答

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) 

然后在submitAction()

self.word_bx.text="" 

将参考实际存在的东西。

+0

您好感谢您的答案,这是不是解决办法。我必须将文本框添加到布局小部件,我不能仅仅声明它为自己的kivy不喜欢那样。 –

+0

您将错误报告为Class LoginPage没有属性word_bx。我解释了原因。我不明白“我不能仅仅因为自己的kivy不喜欢这样就宣布它。” Kivy无法判断您的变量是否声明为self.word_bx或word_bx。你能更清楚一些基维不喜欢的东西吗?在你使AttributeError消失之后,你会得到什么其他的错误? – BoarGules

+0

是的,但如果我做'self.word_bx'我得到一个错误,说该类没有属性word_bx。我认为它是我的错,因为我没有给你看整个代码,我不建立这个类,它是屏幕管理器的一部分,否则我认为你的解决方案会起作用。 –

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) 
相关问题