Use the after method. From a discussion here . import Tkinter as tki, time class App(object): def __init__(self): self.root = tki.Tk() self.win = tki.Text(self.root, undo=True, width=20, height=5) self.win.pack(side='top', expand=True, fill='both') self.poll() def poll(self): print time.strftime('%H:%M:%S') self.win.insert(tki.END, time.strftime('%H:%M:%S') + '\n') self.root.after(1000, self.poll) app = App() app.root.mainloop() From a further discussion here , use the after_cancel method to cancel the polling. after returns a job id that you need for the cancellation import Tkinter as tki, time class App(object): def __init__(self): self.root = tki.Tk() self.win = tki.Text(self.root, undo=True, width=10, height=1) self.win.pack(side='left') self.cancel = tki.Button(self.root,text='Stop',command=self.stop) self.cancel.pack(side='left') self._poll_j...