首页 > 解决方案 > 如何在能够看到之前和之后的情况下执行延迟的 GUI 更改?

问题描述

我需要我的 GUI 来反馈用户。为此,我根据某个验证的结果将某个按钮的背景着色为绿色或红色。我的目的是让绿色保持几秒钟,然后返回初始状态(清除字段并恢复按钮的原始颜色)。

我的问题是,我用来在返回默认 GUI 之前延迟 GUI 的“之后”功能没有显示之前和之后。我只看到按钮是 SUNKEN ,然后在字段和按钮已经恢复为默认值后被提升。

我究竟做错了什么 ?

if condition1 == condition2:
     orig_color = self.button2.cget("background")
     self.button2.config(bg='springgreen2')
     self.return2default(orig_color)
     self.after(3000) # 3 seconds delay to realize a Pass result
     # return to the defaults
     self.SN_field.delete("1.0", "end")
     self.HwVer_field.delete("1.0", "end")
     self.button2.config(bg=color)
else:
     self.button2.config(bg='red2')

标签: pythonpython-3.xtkinter

解决方案


如果您希望在延迟后发生某些事情,请将“某事”移动到一个函数中并安排它使用after. 这将允许事件循环继续处理事件(包括导致显示刷新的事件)。

例如:

def reset(self):
    self.SN_field.dellete("1.0", ,"end")
    self.HwVer_field.delete("1.0", "end")
    self.button2.config(bg=color)

要调用它,请使用after

if condition1 == condition2:
    orig_color = self.button2.cget("background")
    self.button2.config(bg='springgreen2')
    self.return2default(orig_color)
    self.after(3000, self.reset) 

当您after只使用时间参数调用时,它会导致您的整个程序进入睡眠状态,这意味着它无法在睡眠时更新显示。


推荐阅读