android - 如何在 Calllback 上切换 Kivy 布局?
问题描述
我是 Kivy 和 Python 的初学者,我正在尝试创建一个简单的字母应用程序来练习。它应该看起来像这样。
我想创建一个简单的字母应用程序,当按下下一个/上一个按钮时应该在布局之间切换。
我试图做的是将图像放在每个字母的单独浮动布局中,以避免必须使用屏幕管理器和创建/链接 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 的 id 并使其通过下一个/上一个按钮切换布局?
我知道我的函数和 kv 文件中缺少某些内容,但我找不到它。我希望你能帮助我我真的很想了解更多关于 Python 和 Kivy 的知识。非常感谢。
解决方案
如果它是一个标签,您可能会创建一个函数来保存和循环字母表,然后将其输入到标签的输入中。
或者.. 只需使用不同的 imgs AZ 并循环浏览它们(如@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
是全球性的。剩下的只是将变量绑定到标签。
推荐阅读
- jupyter-notebook - Tqdm进度条在模型训练中的使用
- tinymce - 支持韩语 TinyMCE
- firebase - 在控制台中何处查看 Firebase Analytics 事件自定义参数?
- python - 使用 set_data() 更新一行后,Matplotlib 的“重置原始视图”按钮缩放到以前数据的限制
- machine-learning - Inception V2 在 Inception V1 上没有改进
- gcc - 如何打印介子执行的 GCC 命令?
- python - 使用热图居中表格
- c++ - 简单倒计时码不能倒计时
- javascript - 超出图表中的最大文本大小 - mermaid.js
- php - Nginx 站点显示空白