March 2003
Intermediate to advanced
656 pages
39h 30m
English
after_idle
w.after_idle(callable,*args)Registers a callback to
callable
(*
args
)
to be performed when the event loop is idle (i.e., when all pending
events have been processed).
The following example shows how to use after to
implement a simple digital clock:
import Tkinter
import time
curtime = ''
clock = Tkinter.Label( )
clock.pack( )
def tick( ):
global curtime
newtime = time.strftime('%H:%M:%S')
if newtime != curtime:
curtime = newtime
clock.config(text=curtime)
clock.after(200, tick)
tick( )
clock.mainloop( )The kind of polling that method after lets you
establish is an important Tkinter technique.
Several Tkinter widgets have no callbacks to let
you know about user actions on them, so if you want to track such
actions in real-time, polling may be your only option. For example,
here’s how to use polling established with
after to track a Listbox
selection in real time:
import Tkinter
F1 = Tkinter.Frame( )
s = Tkinter.Scrollbar(F1)
L = Tkinter.Listbox(F1)
s.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
L.pack(side=Tkinter.LEFT, fill=Tkinter.Y)
s['command'] = L.yview
L['yscrollcommand'] = s.set
for i in range(30): L.insert(Tkinter.END, str(i))
F1.pack(side=Tkinter.TOP)
F2 = Tkinter.Frame( )
lab = Tkinter.Label(F2)
def poll( ):
lab.after(200, poll)
sel = L.curselection( )
lab.config(text=str(sel))
lab.pack( )
F2.pack(side=Tkinter.TOP)
poll( )
Tkinter.mainloop( )Read now
Unlock full access