首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Calllback上切换Kivy布局?

如何在Calllback上切换Kivy布局?
EN

Stack Overflow用户
提问于 2019-04-06 09:35:59
回答 1查看 102关注 0票数 0

我是Kivy和Python的初学者,我正在尝试创建一个简单的字母表应用程序来练习。它应该是这样的。

我想创建一个简单的字母表应用程序,当下一个/上一个按钮被按下时,它应该在布局之间切换。

我尝试做的是将图像放在字母表中每个字母的单独浮动布局中,以避免使用screenmanager和创建/链接26个屏幕。我只是想通过切换FloatLayouts来切换图像。

我之前问过这个问题,here,到目前为止我得到的是这样的结果。

import kivy
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen


class LearnAlphabetScreen(Screen):
    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['a']
        # 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

    def prev_letter(self):
        current_letter_widget = self.root.ids['a']
        # Get the letter currently shown
        current_letter = current_letter_widget.text
        # Find the next letter in the alphabet
        prev_letter_index = self.alphabet.find(current_letter) - 1
        prev_letter = self.alphabet[prev_letter_index]

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



Builder.load_string("""

<NextButton@Button>
    font_size: 32
    color: 1, 1, 1, 1
    size: 150, 50
    backgroundcolor: .88, .88, .88, 1
    size_hint: .4, .3
    pos: -5, 440


<PrevButton@Button>
    font_size: 32
    color: 1, 1, 1, 1
    size: 150, 50
    backgroundcolor: .88, .88, .88, 1
    size_hint: .4, .3
    pos: -5, 270


<LearnAlphabetScreen>:
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'bgpics/blackboard.png'

    FloatLayout:
    id:layouta
        Label:
            id:a
            text: "A"
            pos: -5, 210
            font_size: '40sp'

    FloatLayout:
    id:layoutb
        Label:
            id:b
            text: "B"
            pos: -5, 210
            font_size: '40sp'

    FloatLayout:
    id:layoutc
        Label:
            id:c
            text: "C"
            pos: -5, 210
            font_size: '40sp'

    NextButton:
        text: "Previous"
        on_release:
            screen.prev_letter()
    PrevButton:
        text: "Next"
        on_release:
            screen.next_letter()



""")



LA=LearnAlphabetScreen()  
class MainApp(App):
    def build(self):
        return LA





if __name__ == '__main__':
    MainApp().run()*

我对如何执行我的计划一无所知。字母表中的每个字母将由图片或文本标签表示,然后它们将包含在单独的FloatLayouts中(我需要它们在单独的FloatLayouts中,以便我能够学习如何在未来通过布局切换操作多个内容)。如何引用FloatLayout的id并使其通过next/previous按钮切换布局?

我知道我的函数和kv文件中缺少了一些东西,但我找不到它。我希望你能帮助我,我真的很想学习更多关于Python和Kivy的知识。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-04-07 10:54:05

如果它是一个标签,你可能会创建一个保存并循环字母表的函数,然后将其输入到标签的输入中。

或者..。只需使用不同的imgs -Z并循环它们(如@el3ien所述)。

编辑:不知道这是否是你想要的,但这里有一些函数可以实现类似的效果。

from string import ascii_lowercase

Alphabet = ascii_lowercase
i = -1

def next():
    global i
    if i<27:
        i = i + 1
    print(Alphabet[i])
next()

def previous():
    global i
    if i<27:
        i = i - 1
    print(Alphabet[i])
previous()

将这些on_release:用于您的按钮。确保您正在运行的i是全局的。它的其余部分只是将变量绑定到标签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55545120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档