Description=""" Widgets communicate The test below gives a voice to the buttons and the text that is changed. The moving of the mouse fast stops the speech of the previous button. Also speech is allowed to continue and not hold up the background screen changes. It is important to know, how widgets can communicate in application. Follow the example.""" #!/usr/bin/python #VoiceFrame.py #HOW TO COMMUNICATE INSIDE A FRAME PANELS! import wx import Sapi5 tts = Sapi5.Create() purge = tts._purge async = tts._async class LeftPanel(wx.Panel): def __init__(self, parent, id): wx.Panel.__init__(self, parent, id, style=wx.BORDER_SUNKEN) self.text = parent.GetParent().rightPanel.text self.textNum = 0 button1 = wx.Button(self, -1, 'Plus', (10, 10)) button2 = wx.Button(self, -1, 'Minus', (10, 40)) button3 = wx.Button(self, -1, 'Voices', (10, 70)) button4 = wx.Button(self, -1, 'Rate', (10, 90)) button5 = wx.Button(self, -1, 'Pitch', (10, 120)) button1.Bind(wx.EVT_ENTER_WINDOW, self.OnPlusSpeak) #, id=button1.GetId()) button2.Bind(wx.EVT_ENTER_WINDOW, self.OnMinusSpeak) #, id=button2.GetId()) button3.Bind(wx.EVT_ENTER_WINDOW, self.OnVoiceSpeak) #, id=button3.GetId()) button4.Bind(wx.EVT_ENTER_WINDOW, self.OnRateSpeak) #, id=button4.GetId()) button5.Bind(wx.EVT_ENTER_WINDOW, self.OnPitchSpeak) #, id=button5.GetId()) self.Bind(wx.EVT_BUTTON, self.OnPlus, id=button1.GetId()) self.Bind(wx.EVT_BUTTON, self.OnMinus, id=button2.GetId()) self.Bind(wx.EVT_BUTTON, self.OnVoice, id=button3.GetId()) self.Bind(wx.EVT_BUTTON, self.OnRate, id=button4.GetId()) self.Bind(wx.EVT_BUTTON, self.OnPitch, id=button5.GetId()) def OnPlusSpeak(self, event): self.text.SetLabel( str( self.textNum)) text = "Plus Button " +self.text.GetLabel() tts.Speak(text, async, purge) def OnMinusSpeak(self, event): self.text.SetLabel( str( self.textNum)) text = "Minus Buttonn " +self.text.GetLabel() tts.Speak(text, async, purge) def OnVoiceSpeak(self, event): num = tts.getVoiceNum() text = "Voices Button To Change " +tts.getVoiceNameByNum( num) tts.Speak(text, async, purge) def OnRateSpeak(self, event): text = "Rate Buttonn " +str( tts.getRate()) tts.Speak(text, async, purge) def OnPitchSpeak(self, event): text = "Pitch Buttonn " +str( tts.getPitch()) tts.Speak(text, async, purge) def OnPlus(self, event): self.textNum = int(self.text.GetLabel()) +1 tts.Speak( self.textNum, async) self.text.SetLabel( str( self.textNum)) def OnMinus(self, event): self.textNum = int(self.text.GetLabel()) -1 tts.Speak( self.textNum, async) self.text.SetLabel( str( self.textNum)) def OnVoice(self, event): value=tts.getVoiceNum() + 1 if value >= tts.getVoiceCount(): value=0 tts.setVoice( value) msg = "The voice is now: %d) %s" % (tts.getVoiceNum(), tts.getVoiceName()) tts.Speak( msg, async, purge) self.text.SetLabel( msg) def OnRate(self, event): value = tts.getRate() + 1 if value > 10: value = -10 tts.setRate( value) msg = "The Rate is now: %d" % value tts.Speak( msg, async, purge) self.text.SetLabel( msg) def OnPitch(self, event): value = tts.getPitch() + 1 if value > 10: value = -10 tts.setPitch( value) msg = "The Pitch is now: %d" % value tts.Speak( msg, async, purge) self.text.SetLabel( msg) class RightPanel(wx.Panel): def __init__(self, parent, id): wx.Panel.__init__(self, parent, id, style=wx.BORDER_SUNKEN) self.text = wx.StaticText(self, -1, '0', (40, 60)) class Communicate(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, size=(280, 200)) panel = wx.Panel(self, -1) self.rightPanel = RightPanel(panel, -1) leftPanel = LeftPanel(panel, -1) hbox = wx.BoxSizer() hbox.Add(leftPanel, 1, wx.EXPAND | wx.ALL, 5) hbox.Add(self.rightPanel, 1, wx.EXPAND | wx.ALL, 5) panel.SetSizer(hbox) self.Centre() self.Show(True) app = wx.App(0) Communicate(None, -1, 'widgets communicate') app.MainLoop()