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