0

我正在尝试制作一个计时器来每秒执行一段代码,比如说,在 python 中使用 tkinter。但不是每秒执行一次代码,即在画布上移动标签,它似乎缓冲并等待循环完成,然后才显示移动的标签。下面是我认为问题所在的一段编码。我个人认为第二个函数中的for循环会产生问题,但我不知道如何解决这个问题。

def roll(self):
    number=randint(2,12)
    print number
    if self.a==0:
        self.place_player_1(self.start_turn_pos_1,number+self.start_turn_pos_1)
        self.start_turn_pos_1+=number
    elif self.a==1:
        self.place_player_2(self.start_turn_pos_2,number+self.start_turn_pos_2)
        self.start_turn_pos_2+=number
    return number

def place_player_1(self,start_turn_pos_1,number):
    #Define the board
    for i in range(self.start_turn_pos_1,number+1,1):
        self.c.after(1000,self.move_1(i))

def move_1(self,i):
    e1=streets_x[i]
    g1=streets_y[i]
    self.label_player1.place(x=e1,y=g1)
4

2 回答 2

2

self.move_1(i)立即调用该方法。推迟通话:

self.c.after(1000, self.move_1, i) #note: no parentheses

要每秒重复一次调用,请在方法.after末尾添加调用self.move_1

def place_player_1(self,start_turn_pos_1,number):
    self.c.after(1000, self.move_1, start_turn_pos_1, number) # call in a sec

def move_1(self,i, limit):
    e1=streets_x[i]
    g1=streets_y[i]
    self.label_player1.place(x=e1,y=g1)
    if i < limit: # schedule the next call
       self.c.after(1000, self.move_1, i + 1, limit)

请参阅Python 中使用 tkinter、或 gtk 或 twisted 的 setTimeout()、setInterval() 类似物

于 2013-06-04T22:03:01.957 回答
0

所有函数调用同时发生:

self.c.after(1000,self.move_1(i))

因为在1000毫秒后调用。

使每个步骤的延迟更大。例如:

def place_player_1(self,start_turn_pos_1,number):
    #Define the board
    delay = 1000
    for index, i in enumerate(range(self.start_turn_pos_1, number + 1), 1):
        self.c.after(delay * index, self.move_1, i)

现在您将函数调用安排在不同的时间。

于 2013-06-04T21:44:29.060 回答