Киви: как отобразить «Правильно!» Когда ввод правильный?

Я пытаюсь создать систему, которая будет показывать «правильно», когда ввод правильный. Но я так запутался в том, как работают классы и функции, даже после просмотра руководств и чтения документации, поскольку я новичок в 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 и второго изображения.

Кто-нибудь поможет мне? Пожалуйста?

пожалуйста, помогите мне, мне очень нужна помощь

Tyler Joseph 09.04.2019 10:06
0
1
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот пример того, как вы можете использовать виджет 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 алфавитов, нужно ли мне вызывать их, используя разные идентификаторы?

Tyler Joseph 10.04.2019 15:35

На вашем месте я бы изменил атрибут source: (отображаемый файл) виджета Image, когда вы хотите показать другое изображение. Таким образом, id не изменился, это все еще the_image, но когда вы отметите the_image.source, это будет имя нового изображения.

Erik 10.04.2019 17:21

Таким образом, ваша кнопка «ДАЛЕЕ» больше не будет менять экраны, она просто установит the_image.source = "b.png". Это самое простое, что можно сделать. Более общий способ - установить source на что-то, что не является жестко запрограммированным. Возможно, вы бы установили его на «random_alphabet_letter.png» или получили следующую букву в алфавите, как функция next_letter, которую я написал в предыдущем вашем вопросе.

Erik 10.04.2019 17:29

Другие вопросы по теме