from tkinter import *
##from sys import exit
class Timer:
def __init__(self, master):
self.master=master
buttonstart = Button(master, text = "Start", fg = "blue", command = self.start)
buttonstart.grid(row = 1, column = 0)
buttonquit = Button(master, text = "Quit", fg = "blue", command=self.quitit)
buttonquit.grid(row = 1, column = 2)
self.timertext = DoubleVar()
self.timertext.set(0)
display = Label(master, textvariable = self.timertext)
display.grid(row = 0, column = 0)
self.timeit=False
def increment_timer(self):
if self.timeit:
ctr=int(self.timertext.get())
self.timertext.set(ctr+1)
self.master.after(3000, self.input_delay)
self.master.after(4000, self.output_delay)
if self.timeit:
self.master.after(5000, self.increment_timer)
def input_delay(self):
print("Input Delay")
def output_delay(self):
print("Output Delay")
def start(self):
self.timeit=True
self.increment_timer()
def quitit(self):
self.timeit=False
root = Tk()
app = Timer(root)
root.mainloop()
在increment_timer()方法中,延迟5000可以正常工作,但延迟3000和4000根本不起作用。如果我将延迟 5000 更改为 0,那么它只会继续给出 input_delay 方法的结果。我想在每次迭代中延迟 3 秒后调用 input_delay,并在延迟 4 秒后调用 output_delay。将 5000 更改为 0 很好,因为我不希望在那里出现延迟,而是希望在每次迭代中延迟两次。请为此指导我..
最佳答案
目标是重复以下序列:
- 等待3秒
- 执行
self.input_delay
- 等待 4 秒
- 执行
self.output_delay
您的代码中的问题是您这样做
self.master.after(3000, self.input_delay)
self.master.after(4000, self.output_delay)
因此,您同时安排 self.input_delay
的执行时间为 3 秒,self.output_delay
的执行时间为 4 秒。所以最终两次执行只会相隔1秒。要纠正这个问题,您需要在 self.input_delay
中调度 self.output_delay
的执行,使其在 self.input_delay< 执行后 4 秒执行
.
这是代码的相关部分:
def increment_timer(self):
if self.timeit:
ctr=int(self.timertext.get())
self.timertext.set(ctr+1) # increment timer
# schedule self.input_delay execution
self.master.after(3000, self.input_delay)
def input_delay(self):
print("Input Delay")
# schedule self.output_delay execution after executing `self.input_delay`
self.master.after(4000, self.output_delay)
def output_delay(self):
print("Output Delay")
self.increment_timer() # restart the whole sequence
关于python - Tkinter after() 函数显示异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455890/