我是 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()
如果您有具体问题,我很乐意解答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句