首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何快速更改按钮的颜色

如何快速更改按钮的颜色
EN

Stack Overflow用户
提问于 2019-06-02 20:32:46
回答 1查看 33关注 0票数 -1

我正在构建一个测验应用程序,我希望在用户回答问题后,正确的着装将变成绿色,其他的变成红色,然后恢复正常

我尝试使用Time.sleep()方法,但只做了一个处理,图形用户界面根本没有改变

代码语言:javascript
复制
     def send_answer(self, text):
     return self.success() if text == self.correct else self.end_game()
代码语言:javascript
复制
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]
代码语言:javascript
复制
    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()

我预计颜色会在一小段时间内变为红色/绿色,然后恢复正常,依此类推

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 00:34:55

您的success()方法更改background_color,然后调用get_new_question(),这会将background_color更改回正常状态。通常,当快速连续地对GUI元素进行一系列更改时,只会出现最后一个更改,因此在这种情况下,您将看不到任何更改。此外,在主线程上调用Time.sleep()只会导致延迟,但不允许显示颜色更改。

我建议您将呼叫改为self.get_new_question(),如下所示

代码语言:javascript
复制
Clock.schedule_once(self.get_new_question, 0.5)

这将使对self.get_new_question()的调用延迟半秒,因此您应该会看到颜色发生了变化。您还需要将self.get_new_question()的签名更改为

代码语言:javascript
复制
def get_new_question(self, dt):

代码语言:javascript
复制
def get_new_question(self, *args):
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56415058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档