python - .after 方法 Python 似乎可以立即调用
问题描述
def __show_square_left(square):
square.pack(anchor = "nw", padx = (100,0), pady = (200,0))
print("square shown")
self.__SimonTask.after(ms_visible, __Clear_Square(square))
return
def __show_square_right(square):
square.pack(anchor = "ne", padx = (0,100), pady = (200,0))
print("square shown")
self.__SimonTask.after(ms_visible, __Clear_Square(square))
return
def __Clear_Square(square):
square.pack_forget()
print("square deleted")
print()
self.__SimonTask.after(ms_between, __show_square)
我的问题是我的代码似乎完全忽略了 __show_square_left 和 __show_square_right 之后的内容,因为它会立即运行 __Clear_Square 任何为 ms_visible 填写的数字。另一方面,__Clear_Square 中的 after 确实有效。
我正在创建一个程序,在其中显示正方形(随机显示红色或蓝色),并且随机向左或向右显示
为了做到这一点,我让它们出现给定数量的 ms(ms_visible,我正在填写 2000),当它消失时,另一个应该在给定数量的 ms(ms_between,我也设置为 2000 到测试一下)
为了显示和隐藏方块,程序通过函数 __show_square 运行,这导致函数 __show_square_left 或 __show_square_right 被运行。这些函数执行相同的操作:
- 收拾广场(展示它)
- 在 ms_visible 之后,它应该运行命令 __Clear_Square(从窗口中移除正方形)(gewijzigd)
这就是我的问题所在
它在时间过去之前已经运行了__Clear_Square,所以正方形恰好同时显示和删除,导致正方形永远不会显示
解决方案
立即调用它是因为您实际上在执行时立即调用了它__Clear_Square(square)
。立即调用__Clear_Square
,然后使用它的返回值作为回调(因为它返回None
,这意味着没有执行回调)。
你要:
self.__SimonTask.after(ms_visible, __Clear_Square, square)
它将对函数的引用__Clear_Square
作为回调(不调用它)传递,并square
作为调用它的参数。
推荐阅读
- r - 根据条件对数据框进行重复观察
- javascript - 从另一个文件 javascript 中的函数导入 const
- python - 如何在没有 kv 语言的 Kivy 中添加背景图片
- reactjs - ReactJs 错误:npm start 不工作,我还绑定了“npm cache clean --force”。我被困在我的项目中间
- python - 回归树表现不佳
- r - 如何从非结构化文本中提取某些项目?
- javascript - 访问来自不同文件的变量
- vb.net - 使用 vb.net 中的事件将值从一种形式传递到另一种形式
- node.js - CentOS 7 (WHM) 上 nodejs 服务器的 Apache 反向代理
- css - css 表溢出离开页面