Я пытаюсь создать систему, которая будет показывать «правильно», когда ввод правильный. Но я так запутался в том, как работают классы и функции, даже после просмотра руководств и чтения документации, поскольку я новичок в Python и Kivy.
Это мой код kv на данный момент
<CorrectLayout>
id: correctlayout
Label:
text: 'Gesture Correct!'
background_normal:'bgpics/translateback.jpg'
pos_hint:{"x":-0.15,"y":-.43}
color: 1,1,0,1,1
font_size: '45sp'
font_name: 'EraserRegular.ttf'
Image:
source: 'bgpics/check2.png'
pos_hint:{"x":0.64,"y":.03}
size_hint: .1, .1
allow_stretch: True
keep_ratio: False
<LetterAScreen>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'bgpics/bluebg.jpg'
CorrectLayout:
FloatLayout:
Label:
text: 'Learning the FSL Alphabet'
background_normal:'bgpics/chalk2.png'
pos_hint:{"x":0.009,"y":.43}
font_size: '45sp'
font_name: 'SqueakyChalkSound.ttf'
Image:
source: 'handgesture/a.png'
pos_hint:{"x":0.009,"y":.15}
size_hint: .40, .70
allow_stretch: True
keep_ratio: False
Image:
source: 'handgesture/a.png'
pos_hint:{"x":0.43,"y":.15}
size_hint: .40, .70
allow_stretch: True
keep_ratio: False
Button:
text: "NEXT"
background_normal:'bgpics/translateback.jpg'
font_size: '35sp'
font_name: 'vtks.ttf'
color: 0, 0, 0, 1
pos_hint:{"x":.87,"y":.6}
size_hint: .1, .1
on_press: root.manager.current = 'letterb'
Button:
text: "QUIT"
background_normal:'bgpics/translateback.jpg'
font_size: '35sp'
font_name: 'vtks.ttf'
color: 0, 0, 0, 1
pos_hint:{"x":.87,"y":.2}
size_hint: .1, .1
on_press: root.manager.current = 'menu'
<LetterBScreen>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'bgpics/bluebg.jpg'
CorrectLayout:
FloatLayout:
Label:
text: 'Learning the FSL Alphabet'
background_normal:'bgpics/chalk2.png'
pos_hint:{"x":0.009,"y":.43}
font_size: '45sp'
font_name: 'SqueakyChalkSound.ttf'
Image:
source: 'handgesture/b.png'
pos_hint:{"x":0.009,"y":.15}
size_hint: .40, .70
allow_stretch: True
keep_ratio: False
Image:
source: 'handgesture/b.png'
pos_hint:{"x":0.43,"y":.15}
size_hint: .40, .70
allow_stretch: True
keep_ratio: False
Button:
text: "NEXT"
background_normal:'bgpics/translateback.jpg'
font_size: '35sp'
font_name: 'vtks.ttf'
color: 0, 0, 0, 1
pos_hint:{"x":.87,"y":.6}
size_hint: .1, .1
on_press: root.manager.current = 'lettera'
Button:
text: "BACK"
background_normal:'bgpics/translateback.jpg'
font_size: '35sp'
font_name: 'vtks.ttf'
color: 0, 0, 0, 1
pos_hint:{"x":.87,"y":.4}
size_hint: .1, .1
on_press: root.manager.current = 'lettera'
Button:
text: "QUIT"
background_normal:'bgpics/translateback.jpg'
font_size: '35sp'
font_name: 'vtks.ttf'
color: 0, 0, 0, 1
pos_hint:{"x":.87,"y":.2}
size_hint: .1, .1
on_press: root.manager.current = 'menu'
и мой файл .py (не включая ненужные части)
class CorrectLayout(FloatLayout):
pass
class LetterAScreen(Screen):
pass
class LetterBScreen(Screen):
pass
sm = ScreenManager(transition=SwapTransition())
sm.add_widget(LetterAScreen(name='lettera'))
sm.add_widget(LetterBScreen(name='letterb'))
class MainApp(App):
def build(self):
return sm
if __name__ == '__main__':
MainApp().run()
Я просто сначала отформатировал все, чтобы знать, где они будут размещены, но я не знаю, где это взять отсюда. Мой файл .py только что использовал «проход» для всех классов, которые я включил в файл kv. Я не знаю, как реализовать классы и функции для достижения того, что мне нужно.
Ввод будет осуществляться с клавиатуры, и по словарю будет решаться, соответствует ли буква изображению. Если буква совпадает с картинкой, то рядом с ней должна появиться картинка вместе со знаком CorrectLayout
. Затем, когда пользователь нажимает «Далее» в LetterAscreen
и переходит к LetterBScreen
, затем нажимает «Предыдущий», мне нужно, чтобы LetterAScreen
вернулся к отсутствию CorrectLayout
и второго изображения.
Кто-нибудь поможет мне? Пожалуйста?
Вот пример того, как вы можете использовать виджет TextInput
, чтобы получить пользовательский ввод. Затем вам нужно определить функцию, которая будет проверять, что пользователь ввел в имя (source
) вашего виджета Image
. Вызовите эту функцию с помощью какой-либо кнопки, чтобы проверить ввод пользователя. Вот очень короткий пример того, как это сделать (убедитесь, что файлы называются main.py и основной.кв)
main.py
from kivy.app import App
class MainApp(App):
def check_answer(self, text_to_check, *args):
# You can ignore what is held in *args, but keep it there
# Get the name of the image
the_image = self.root.ids['the_image']
the_image_name = the_image.source
# Get the user's input
print("the image name was: ", the_image_name)
print("Your guess was: ", text_to_check)
if the_image_name == text_to_check:
print("Correct!")
else:
print("Incorrect :(")
MainApp().run()
main.kv
GridLayout:
cols: 1
Image:
id: the_image
source: "a.png"
TextInput:
id: the_text_input
hint_text: "Type your answer here"
Button:
text: "Check Answer"
on_release:
# Call the function we defined in the python file
# Pass the text that the user put in by referencing the id of the
# TextInput and getting the value of the text
app.check_answer(the_text_input.text)
Еще раз спасибо за помощь мне снова сэр! Большая помощь, так много. У меня небольшой вопрос вдогонку. Если у меня есть 26 разных изображений png для 26 алфавитов, нужно ли мне вызывать их, используя разные идентификаторы?
На вашем месте я бы изменил атрибут source:
(отображаемый файл) виджета Image
, когда вы хотите показать другое изображение. Таким образом, id
не изменился, это все еще the_image
, но когда вы отметите the_image.source
, это будет имя нового изображения.
Таким образом, ваша кнопка «ДАЛЕЕ» больше не будет менять экраны, она просто установит the_image.source = "b.png"
. Это самое простое, что можно сделать. Более общий способ - установить source
на что-то, что не является жестко запрограммированным. Возможно, вы бы установили его на «random_alphabet_letter.png» или получили следующую букву в алфавите, как функция next_letter
, которую я написал в предыдущем вашем вопросе.
пожалуйста, помогите мне, мне очень нужна помощь