簡體   English   中英

如何在回調中替換Kivy小部件?

[英]How To Replace Kivy Widgets On Callback?

我是Python和Kivy的新手,我正在嘗試創建盲文字母的多字母顯示,每頁都有相應的盲文字母圖片。 我真的想了解更多有關創建Kivy桌面應用程序的信息。 我真的希望你能幫助我。 我要做的是讓頁面看起來像這樣: 如

我知道如何在KV文件中放置和定制圖像和按鈕的大小和位置。 然而,我需要學習的是add_widget()clear_widget()將如何影響這一點。 我已經閱讀了Kivy文檔,但他們幾乎沒有解釋我如何實現我的需求。 我想做的是使用from kivy.uix.screenmanager import ScreenManager, Screen功能,然后創建26個屏幕並通過kv文件中的on_click進行路由。 但這太乏味而且過於手工。 到目前為止,這是我的代碼:

class LetterAScreen(Screen):
    pass

class LetterBScreen(Screen):
    pass

class LetterCScreen(Screen):
    pass

class LetterDScreen(Screen):
    pass

class LetterEScreen(Screen):
    pass

class LetterFScreen(Screen):
    pass

class LetterGScreen(Screen):
    pass

 #.... so and so until Letter Z




sm = ScreenManager(transition=SwapTransition())

#LearnScreen - Alphabet
sm.add_widget(LetterAScreen(name='lettera'))
sm.add_widget(LetterBScreen(name='letterb'))
sm.add_widget(LetterCScreen(name='letterc'))
sm.add_widget(LetterDScreen(name='letterd'))
sm.add_widget(LetterEScreen(name='lettere'))

sm.add_widget(LetterFScreen(name='letterf'))
sm.add_widget(LetterGScreen(name='letterg'))
sm.add_widget(LetterHScreen(name='letterh'))
sm.add_widget(LetterIScreen(name='letteri'))
sm.add_widget(LetterJScreen(name='letterj'))
sm.add_widget(LetterKScreen(name='letterk'))
sm.add_widget(LetterLScreen(name='letterl'))

sm.add_widget(LetterMScreen(name='letterm'))
sm.add_widget(LetterNScreen(name='lettern'))
sm.add_widget(LetterOScreen(name='lettero'))
sm.add_widget(LetterPScreen(name='letterp'))
sm.add_widget(LetterQScreen(name='letterq'))
sm.add_widget(LetterRScreen(name='letterr'))

sm.add_widget(LetterSScreen(name='letters'))
sm.add_widget(LetterTScreen(name='lettert'))
sm.add_widget(LetterUScreen(name='letteru'))
sm.add_widget(LetterVScreen(name='letterv'))
sm.add_widget(LetterWScreen(name='letterw'))
sm.add_widget(LetterXScreen(name='letterx'))
sm.add_widget(LetterYScreen(name='lettery'))
sm.add_widget(LetterZScreen(name='letterz'))

我還沒有找到kv文件,因為我很無知這將如何發展。 我需要做的是創建小部件或一個函數,它將交換當前字母的圖像,並在單擊下一個/按鈕時顯示下一個或前一個圖像的圖像,而不必每次都切換屏幕。 我真的不熟悉Kivy和Python中函數的工作方式。 我希望你能幫助我。 謝謝。

這是解決您問題的簡單方法。 我會留給你修改,使它看起來和工作完全按照你想要的:)

學習kv語言非常有用,簡單,而且可以很快地學習。

main.py

from kivy.app import App

class MainApp(App):
    alphabet = 'abcdefghijklmnopqrstuvwxyz'

    def next_letter(self):
        # Get a reference to the widget that shows the letters
        # self.root refers to the root widget of the kv file -- in this case,
        # the GridLayout
        current_letter_widget = self.root.ids['the_letter_label']
        # Get the letter currently shown
        current_letter = current_letter_widget.text
        # Find the next letter in the alphabet
        next_letter_index = self.alphabet.find(current_letter) + 1
        next_letter = self.alphabet[next_letter_index]

        # Set the new letter in the widget that shows the letters
        current_letter_widget.text = next_letter

MainApp().run()

main.kv

GridLayout: # This is the `root` widget of the main app class
    cols: 1
    Label:
        text: "g"
        id: the_letter_label # Setting an id for a widget lets you refer to it later
    Button:
        text: "Previous"
    Button:
        text: "Next"
        on_release:
            # the keyword `app` references the main app class, so we can call
            # the `next_letter` function
            app.next_letter()

如果你有這些問題,我很樂意解決具體問題。

暫無
暫無

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

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