Я новичок в Kivy и Python и пытаюсь создать простое алфавитное приложение для практики. Это должно выглядеть примерно так. ![Simple alphabet app that should transfer between layouts when the next/prev button is pushed](https://i.stack.imgur.com/7itU8.png)
Я хочу создать простое алфавитное приложение, которое должно переключаться между макетами, когда нажимается следующая / предыдущая кнопка.
То, что я пытался сделать, это поместить изображения в отдельные плавающие макеты в соответствии с буквой алфавита, чтобы избежать необходимости использовать менеджер экрана и создавать / связывать 26 экранов. Я пытаюсь просто переключать изображения, переключая FloatLayouts.
Я задавал вопрос ранее здесь , и до сих пор это то, что у меня есть.
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 и заставить его переключать макеты с помощью кнопок «следующий / предыдущий»?
Я знаю, что чего-то не хватает в моих функциях и файле kv, но я не могу найти это. Я надеюсь, что вы можете мне помочь. Я действительно хочу узнать больше о Python и Kivy. Большое спасибо.