.after方法Python似乎被立即调用

时间:2018-10-23 19:57:52

标签: python tkinter

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函数 这些功能的作用相同:

  1. 收拾正方形(显示出来)
  2. 在ms_visible之后,它应该运行__Clear_Square命令(该命令将从窗口中移开看不见的正方形)(gewijzigd)

那就是我的问题所在

它已经在时间过去之前运行__Clear_Square,所以正方形恰好同时显示和删除,从而导致正方形永远不会显示

1 个答案:

答案 0 :(得分:1)

之所以立即调用它是因为您实际上在执行__Clear_Square(square)时立即调用了它。即立即调用__Clear_Square,然后将其返回值用作回调(因为它返回了None,这意味着不执行回调)。

您要

self.__SimonTask.after(ms_visible, __Clear_Square, square)

会将对__Clear_Square函数的引用作为回调(对其进行调用),并将square作为对其进行调用的参数。