]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/RadioButton.py
Fix "warning: operation on 'y' may be undefined".
[wxWidgets.git] / wxPython / demo / RadioButton.py
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