2017-06-09 45 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) 
相關問題