我是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,并使其通过下一个/上一个按钮切换布局?
我知道我的函数和kv文件中缺少某些内容,但找不到。希望您能帮助我,我真的很想了解有关Python和Kivy的更多信息。非常感谢。
答案 0 :(得分:0)
如果它是标签,则可以创建一个函数来保存和循环字母表,然后将其输入标签的输入中。
或者..只需使用不同的img A-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
是全局的。其余的只是将变量绑定到标签上。