python - 如何在能够看到之前和之后的情况下执行延迟的 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')
解决方案
如果您希望在延迟后发生某些事情,请将“某事”移动到一个函数中并安排它使用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
只使用时间参数调用时,它会导致您的整个程序进入睡眠状态,这意味着它无法在睡眠时更新显示。
推荐阅读
- ros - 如何将 sensor_msgs/FluidPressure 重新发布为 geometry_msgs/PointStamped?
- scala - Scala Akka (un) 使用 Spray JSON 编组嵌套的 Seq 集合
- flutter - IOS模拟器软件键盘不出现
- quarkus - Quarkus RESTEasy 反应式在 2.2 版之前如何工作?
- r - 绘制一个曲面并使用 R 在其上添加点:plot3D 的问题
- ios - 使用混合分数和绝对值来调整 NSCollectionLayoutItem 的大小
- javascript - 将来自 AsyncStorage 的数据放入 Text
- python - 如何将一列中的值添加到时间戳列作为天?
- flutter - 我在尝试运行版本 1.22.6 的颤振项目时遇到此错误
- data-visualization - Tableau 在计算字段内添加过滤器