<p>下面是<code>after</code>和<code>after_cancel</code>的演示</p>
<p>需要取消每个<code>after</code>以清除事件队列</p>
<p>在该程序中,每次按下按钮都会生成一个延时事件。
事件ID存储在<code>self.after_time</code></p>
<p>为了演示,我将延迟值设置为每按一次按钮增加100毫秒。
它从视图中撤回主控形状</p>
<p>当时间延迟事件完成时,它调用<code>self.action</code></p>
<p><code>self.action</code>使用<code>after_cancel( self.after_time )</code>取消事件
主屏幕显示,为下一次按钮按下做好准备</p>
<pre class="lang-py prettyprint-override"><code>
import tkinter
class after_demo:
delay = 100
def __init__( self ):
self.master = tkinter.Tk()
self.master.title( 'After Demo' )
self.control = tkinter.Button(
self.master, text = 'Begin Demo',
width = 40, command = self.pause )
self.control.grid(row=0,column=0,sticky='nsew')
def action( self ):
self.master.after_cancel( self.after_time )
self.control[ 'text' ] = 'Delay( {} ) ms'.format( self.delay )
self.master.deiconify()
def pause( self ):
self.after_time = self.master.after( self.delay, self.action )
self.delay += 100
self.master.withdraw()
if __name__ == '__main__':
timer = after_demo( )
tkinter.mainloop()
</code></pre>