如何在回调时替换 Kivy 小部件?

泰勒约瑟夫

我是 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Kivy中重置小部件

来自分类Dev

如何在kivy中删除小部件?

来自分类Dev

如何立即更新Kivy中的小部件?

来自分类Dev

如何在BoxLayout中将kivy小部件相对于其他小部件居中?

来自分类Dev

如何在Kivy中防止小部件的大小改变?

来自分类Dev

如何在Kivy中获取小部件/布局的实际大小?

来自分类Dev

如何在Kivy中添加滚动文本小部件?

来自分类Dev

如何在KIVY中删除小部件(标签,按钮等)

来自分类Dev

如何在Kivy中固定小部件?(或窗口)

来自分类Dev

如何在Kivy中防止小部件的大小改变?

来自分类Dev

如何在Kivy中查找小部件占用的区域/顶点?

来自分类Dev

Kivy更新小部件

来自分类Dev

Kivy删除小部件

来自分类Dev

Kivy在移动小部件时在小部件中获取其位置

来自分类Dev

运行代码时更新kivy小部件的属性

来自分类Dev

添加 for 循环时 kivy 未正确添加/放置小部件

来自分类Dev

Kivy:如何将背景触摸与小部件触摸分开?

来自分类Dev

我如何独立设置kivy小部件位置平台?

来自分类Dev

如何使用 kivy 中的弹出窗口小部件更改屏幕?

来自分类Dev

在kivy中添加小部件

来自分类Dev

在kivy中添加小部件

来自分类Dev

循环创建 Kivy 小部件

来自分类Dev

如何在Kivy中从一组小部件动态创建纹理?

来自分类Dev

如何在kivy中使用python类使用下拉小部件

来自分类Dev

如何在Kivy中获取小部件在其布局中的位置?

来自分类Dev

如何在Kivy中使用Scatter小部件精确拖动图片

来自分类Dev

如果未动态添加,如何在Kivy中正确删除小部件

来自分类Dev

如何在Python Kivy中的每个小部件中绘制线条

来自分类Dev

如何在Kivy中从一组小部件动态创建纹理?

Related 相关文章

热门标签

归档