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之后的内容,因为无论ms_visible填写多少,它都会立即运行__Clear_Square。 另一方面,__ Clear_Square中的after确实有效。
我正在创建一个程序,其中我显示正方形(随机显示红色或蓝色),并随机向左或向右显示
为此,我让它们以给定的ms数出现(ms_visible,我在2000年对此进行填充),当它消失时,另一个应该在给定的ms数之后显示(ms_between,我也将其设置为到2000年进行测试)
要显示和隐藏正方形,该程序将通过__show_square函数运行,从而导致运行__show_square_left或__show_square_right函数 这些功能的作用相同:
那就是我的问题所在
它已经在时间过去之前运行__Clear_Square,所以正方形恰好同时显示和删除,从而导致正方形永远不会显示
答案 0 :(得分:1)
之所以立即调用它是因为您实际上在执行__Clear_Square(square)
时立即调用了它。即立即调用__Clear_Square
,然后将其返回值用作回调(因为它返回了None
,这意味着不执行回调)。
您要
self.__SimonTask.after(ms_visible, __Clear_Square, square)
会将对__Clear_Square
函数的引用作为回调(不对其进行调用),并将square
作为对其进行调用的参数。