簡體   English   中英

Kivy如何訪問函數中的小部件,沒有KV只是Python代碼

[英]Kivy how to access widget in function, no KV just python code

抱歉,我的基本問題很嚴重,但是我一直在尋找一個小時的答案,但無濟於事。

這是我的基本代碼:

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。 然后,我嘗試將“ ids”放置在自身的前面,但這引發了另一個錯誤。 我究竟做錯了什么? 對不起,我無能為力..

這些線

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=""

submitAction()中將引用實際存在的內容。

我使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM