Замена значений переменных при использовании on_press в Kivy - PullRequest
0 голосов
/ 02 августа 2020

Я создаю настольное приложение, чтобы выучить венгерский язык. Что мне нужно сделать, так это обновить переменные eng_text, hun_text и hun_audio и обновить представление в приложении, чтобы отобразить новые значения в тексте отображения виджетов. У меня есть 3 виджета, первый отображает фразу на английском sh, второй на венгерском и последний - это кнопка для получения новой фразы. Любая помощь будет оценена. TIA.

# hungarian_tutor.py

""" A program to teach Hungarian translated from English """
import kivy
kivy.require("1.11.1")

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core import image as coreImage
from random import choice
from kivy.core.audio import SoundLoader
import hungarian_language as hl
import time


class Grid(GridLayout):
    def __init__(self, **kwargs):
        super(Grid, self).__init__(**kwargs)

        eng_text, hun_text, hun_audio = choice(hl.basics)

        self.cols = 1
        self.add_widget(Label(text="English  >  {}".format(eng_text), font_size=50))
        self.add_widget(Label(text="Hungarian  >  {}".format(hun_text), font_size=50))
        self.add_widget(Label(text=hl.alphabet, font_size=20))
        self.btn1 = Button(text="New Phrase", font_size=40)
        self.btn1.bind(on_press=self.new_phrase)
        self.add_widget(self.btn1)

    @staticmethod
    def new_phrase(self):
        phrase = choice(hl.basics)
        eng_text = phrase[0]
        hun_text = phrase[1]
        hun_audio = phrase[2]
        print(phrase)
        return eng_text, hun_text, hun_audio

    @staticmethod
    def say_phrase(self, audio_file):
        # Create the Sound Loader object and play sound
        audio_output = SoundLoader.load("audio/" + audio_file)
        if audio_output:
            audio_output.play()
            time.sleep(audio_output.length + 0.5)


class MainApp(App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self):
        return Grid()


if __name__ == "__main__":
    MainApp().run()
...