![](/img/trans.png)
[英]kivy: How to add a callback to a unfocus event on TextIput widgets
[英]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.