Как быстро изменить цвет кнопки - PullRequest
0 голосов
/ 02 июня 2019

Я создаю приложение для викторины, я хочу, чтобы после того, как пользователь ответил на вопрос, правильный ответ стал зеленым, а другой - красным и впоследствии вернулся к нормальному состоянию

Я пытался использовать метод Time.sleep (), но только сделал дили, и графический интерфейс вообще не изменился

     def send_answer(self, text):
     return self.success() if text == self.correct else self.end_game()
def get_new_question(self):
        rnd_sql = "SELECT * FROM persons ORDER BY RANDOM() LIMIT 4;"
        four_persons = GAME_DB.execute(rnd_sql, ())
        four_persons_names = [" ".join([person[0], person[1]]) for person in four_persons]
        self.answers = four_persons_names
        rnd_num = random.randrange(0, 4)
        self.correct = four_persons_names[rnd_num]
        print four_persons_names[rnd_num]
        self.pic = CoreImage(io.BytesIO(four_persons[rnd_num][2]), ext=four_persons[rnd_num][3])
        self.ids.main_pic.texture = self.pic.texture
        buttons = ["button_{0}".format(i + 1) for i in range(0, 4)]
        for b in buttons:
            # Return to normal color
            self.ids[b].background_color = [0.2, 0.5, 0.7, 1]
    def success(self):
        self.score += 10
        buttons = ["button_{0}".format(i + 1) for i in range(0, 4)]
        for b in buttons:
            if self.ids[b].text == self.correct:
                #Change to Green
                self.ids[b].background_color = [0, 1, 0, 1]
            else:
                #Change to Red
                self.ids[b].background_color = [1, 0, 0, 1]
        self.get_new_question()

Я ожидал, что цвет будет изменен на Красный / Зеленый в течение небольшого времени, а затем вернется к нормальному состоянию и т. Д.

1 Ответ

0 голосов
/ 02 июня 2019

Ваш метод success() изменяет background_color, затем вызывает get_new_question(), что возвращает background_color к нормальному состоянию.Как правило, когда последовательность изменений элемента GUI выполняется в быстрой последовательности, появляется только последний, поэтому в этом случае вы не увидите никаких изменений.Кроме того, вызов Time.sleep() в главном потоке просто вызовет задержку, но не позволит отобразить изменение цвета.

Я бы предложил изменить ваш вызов на self.get_new_question() с чем-то вроде

Clock.schedule_once(self.get_new_question, 0.5)

Это задержит вызов на self.get_new_question() на полсекунды, поэтому вы должны увидеть изменение цвета.Вам также необходимо изменить подпись self.get_new_question() на

def get_new_question(self, dt):

или

def get_new_question(self, *args):
...