newby: repeatedly updating text control after pause

This should do the job.

Jean-Michel Fauth, Switzerland

#-*- coding: iso-8859-1 -*-

···

#---------------------------------------------------------------------
# Name: displayletters.py
# Purpose: ...
# Author: Jean-Michel Fauth, Switzerland
# Copyright: (c) 2005 Jean-Michel Fauth
# Licence: GPL
#---------------------------------------------------------------------
# os dev: windows 98
# py dev: Python 2.4.2
# wx dev: wxPython 2.6.1
# Revision: 23 November 2005
#---------------------------------------------------------------------

import wx

#-------------------------------------------------------------------

class MyPanel(wx.Panel):

     def __init__(self, parent):
         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)
         self.parent = parent

         self.dt = 500 #ms
         self.i = 0

         self.txt = wx.TextCtrl(self, wx.NewId(), '', (-1, -1), (-1, -1))

         self.but1 = wx.Button(self, wx.NewId(), 'start timer', (-1, -1), wx.DefaultSize)
         self.but1.Bind(wx.EVT_BUTTON, self.OnClick1)

         self.but2 = wx.Button(self, wx.NewId(), 'stop timer', (-1, -1), wx.DefaultSize)
         self.but2.Bind(wx.EVT_BUTTON, self.OnClick2)

         self.timer1 = wx.Timer(self, wx.NewId()) #not running
         self.Bind(wx.EVT_TIMER, self.OnTimer1)

         sizer1 = wx.BoxSizer(wx.VERTICAL)
         b = 10
         sizer1.Add(self.txt, 0, wx.GROW | wx.ALL, b)
         sizer1.Add(self.but1, 0, wx.ALL, b)
         sizer1.Add(self.but2, 0, wx.ALL, b)
         self.SetSizerAndFit(sizer1)
         self.parent.SetClientSize(sizer1.GetSize())

         self.but1.SetFocus()

     def OnClick1(self, event):
         self.timer1.Start(self.dt)

     def OnClick2(self, event):
         self.timer1.Stop()

     def OnTimer1(self, event):
         letters = 'abcdefghijklmnopqrstuvwxyz'
         c = letters[self.i]
         if self.i < len(letters) - 1:
             self.i = self.i + 1
         else:
             self.i = 0
         self.txt.SetValue((' ' + c) * 5)

#-------------------------------------------------------------------

class MyFrame(wx.Frame):

     def __init__(self, parent, id):
         s = __file__
         wx.Frame.__init__(self, parent, id, s, (0, 0), (-1, -1))
         self.pa = MyPanel(self)

         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)

     def OnCloseWindow(self, event):
         self.pa.timer1.Stop()
         self.Destroy()

#-------------------------------------------------------------------

class MyApp(wx.App):

     def OnInit(self):
         frame = MyFrame(None, -1)
         frame.Show(True)
         self.SetTopWindow(frame)
         return True

#-------------------------------------------------------------------

def main():
     app = MyApp(False)
     app.MainLoop()

#-------------------------------------------------------------------

if __name__ == "__main__" :
     main()

#eof-------------------------------------------------------------------