| 1 | |
| 2 | import wx |
| 3 | |
| 4 | #---------------------------------------------------------------------- |
| 5 | |
| 6 | class TestPanel( wx.Panel ): |
| 7 | def __init__( self, parent, log ): |
| 8 | |
| 9 | wx.Panel.__init__( self, parent, -1 ) |
| 10 | self.log = log |
| 11 | panel = wx.Panel( self, -1 ) |
| 12 | |
| 13 | # Layout controls on panel: |
| 14 | vs = wx.BoxSizer( wx.VERTICAL ) |
| 15 | |
| 16 | box1_title = wx.StaticBox( panel, -1, "Group 1" ) |
| 17 | box1 = wx.StaticBoxSizer( box1_title, wx.VERTICAL ) |
| 18 | grid1 = wx.FlexGridSizer( 0, 2, 0, 0 ) |
| 19 | |
| 20 | # 1st group of controls: |
| 21 | self.group1_ctrls = [] |
| 22 | radio1 = wx.RadioButton( panel, -1, " Radio1 ", style = wx.RB_GROUP ) |
| 23 | radio2 = wx.RadioButton( panel, -1, " Radio2 " ) |
| 24 | radio3 = wx.RadioButton( panel, -1, " Radio3 " ) |
| 25 | text1 = wx.TextCtrl( panel, -1, "" ) |
| 26 | text2 = wx.TextCtrl( panel, -1, "" ) |
| 27 | text3 = wx.TextCtrl( panel, -1, "" ) |
| 28 | self.group1_ctrls.append((radio1, text1)) |
| 29 | self.group1_ctrls.append((radio2, text2)) |
| 30 | self.group1_ctrls.append((radio3, text3)) |
| 31 | |
| 32 | for radio, text in self.group1_ctrls: |
| 33 | grid1.Add( radio, 0, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT|wx.TOP, 5 ) |
| 34 | grid1.Add( text, 0, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT|wx.TOP, 5 ) |
| 35 | |
| 36 | box1.Add( grid1, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) |
| 37 | vs.Add( box1, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) |
| 38 | |
| 39 | box2_title = wx.StaticBox( panel, -1, "Group 2" ) |
| 40 | box2 = wx.StaticBoxSizer( box2_title, wx.VERTICAL ) |
| 41 | grid2 = wx.FlexGridSizer( 0, 2, 0, 0 ) |
| 42 | |
| 43 | # 2nd group of controls: |
| 44 | self.group2_ctrls = [] |
| 45 | radio4 = wx.RadioButton( panel, -1, " Radio1 ", style = wx.RB_GROUP ) |
| 46 | radio5 = wx.RadioButton( panel, -1, " Radio2 " ) |
| 47 | radio6 = wx.RadioButton( panel, -1, " Radio3 " ) |
| 48 | text4 = wx.TextCtrl( panel, -1, "" ) |
| 49 | text5 = wx.TextCtrl( panel, -1, "" ) |
| 50 | text6 = wx.TextCtrl( panel, -1, "" ) |
| 51 | self.group2_ctrls.append((radio4, text4)) |
| 52 | self.group2_ctrls.append((radio5, text5)) |
| 53 | self.group2_ctrls.append((radio6, text6)) |
| 54 | |
| 55 | for radio, text in self.group2_ctrls: |
| 56 | grid2.Add( radio, 0, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT|wx.TOP, 5 ) |
| 57 | grid2.Add( text, 0, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT|wx.TOP, 5 ) |
| 58 | |
| 59 | box2.Add( grid2, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) |
| 60 | vs.Add( box2, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) |
| 61 | |
| 62 | panel.SetSizer( vs ) |
| 63 | vs.Fit( panel ) |
| 64 | panel.Move( (50,50) ) |
| 65 | self.panel = panel |
| 66 | |
| 67 | # Setup event handling and initial state for controls: |
| 68 | for radio, text in self.group1_ctrls: |
| 69 | self.Bind(wx.EVT_RADIOBUTTON, self.OnGroup1Select, radio ) |
| 70 | |
| 71 | for radio, text in self.group2_ctrls: |
| 72 | self.Bind(wx.EVT_RADIOBUTTON, self.OnGroup2Select, radio ) |
| 73 | |
| 74 | for radio, text in self.group1_ctrls + self.group2_ctrls: |
| 75 | radio.SetValue(0) |
| 76 | text.Enable(False) |
| 77 | |
| 78 | def OnGroup1Select( self, event ): |
| 79 | radio_selected = event.GetEventObject() |
| 80 | self.log.write('Group1 %s selected\n' % radio_selected.GetLabel() ) |
| 81 | |
| 82 | for radio, text in self.group1_ctrls: |
| 83 | if radio is radio_selected: |
| 84 | text.Enable(True) |
| 85 | else: |
| 86 | text.Enable(False) |
| 87 | |
| 88 | def OnGroup2Select( self, event ): |
| 89 | radio_selected = event.GetEventObject() |
| 90 | self.log.write('Group2 %s selected\n' % radio_selected.GetLabel() ) |
| 91 | |
| 92 | for radio, text in self.group2_ctrls: |
| 93 | if radio is radio_selected: |
| 94 | text.Enable(True) |
| 95 | else: |
| 96 | text.Enable(False) |
| 97 | |
| 98 | #---------------------------------------------------------------------- |
| 99 | |
| 100 | def runTest( frame, nb, log ): |
| 101 | win = TestPanel( nb, log ) |
| 102 | return win |
| 103 | |
| 104 | #---------------------------------------------------------------------- |
| 105 | |
| 106 | |
| 107 | overview = """\ |
| 108 | <html><body> |
| 109 | <P> |
| 110 | This demo shows how individual radio buttons can be used to build |
| 111 | more complicated selection mechanisms... |
| 112 | <P> |
| 113 | It uses 2 groups of wx.RadioButtons, where the groups are defined by |
| 114 | instantiation. When a wx.RadioButton is created with the <I>wx.RB_GROUP</I> |
| 115 | style, all subsequent wx.RadioButtons created without it are implicitly |
| 116 | added to that group by the framework. |
| 117 | </body></html> |
| 118 | """ |
| 119 | |
| 120 | |
| 121 | |
| 122 | if __name__ == '__main__': |
| 123 | import sys,os |
| 124 | import run |
| 125 | run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) |
| 126 | |