The wxComboBox and wxListBox controls are similar to wxChoice. The three controls share many methods. Let's take a quick look at the two controls and compare them with wxChoice: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) # Create the wxChoice control self.choice = wxChoice ( self.panel, -1, choices = [ 'A', 'B', 'C', 'D' ] ) # Create the wxComboBox control self.combo = wxComboBox ( self.panel, -1, '0', choices = [ '1', '2', '3', '4' ] ) # Create the wxListBox control self.list = wxListBox ( self.panel, -1, choices = [ 'I', 'II', 'III', 'IV' ] ) # Append an option to each control self.choice.Append ( 'E' ) self.combo.Append ( '5' ) self.list.Append ( 'V' ) # Delete an option from each control self.choice.Delete ( 0 ) self.combo.Delete ( 0 ) self.list.Delete ( 0 ) # Replace choices self.choice.SetString ( 1, 'X' ) self.combo.SetString ( 1, 'X' ) self.list.SetString ( 1, 'X' ) # Count items self.choice.itemNum = self.choice.GetCount() self.combo.itemNum = self.combo.GetCount() self.list.itemNum = self.list.GetCount() # Add a button self.button = wxButton ( self.panel, 100, 'Click' ) EVT_BUTTON ( self.panel, 100, self.click ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.sizer.Add ( self.combo, 0 ) self.sizer.Add ( self.list, 0 ) self.sizer.Add ( self.button, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) def click ( self, event ): # Display the position of all selections print self.choice.GetSelection(), self.combo.GetSelection(), self.list.GetSelection() # Display the selection print self.choice.GetStringSelection(), self.combo.GetStringSelection(), self.list.GetStringSelection() application = wxPySimpleApp() window = OurFrame() application.MainLoop() The wxComboBox and wxListBox controls, however, do contain additional methods that you may use. First, we will tackle wxComboBox. As you know, wxComboBox provides the user with both a list and a text box. If you played around with the last example a bit, you probably saw that the GetStringSelection method will not return values that the user has typed in. Since GetSelection will return -1, however, it is easy to work around this: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.combo = wxComboBox ( self.panel, -1, choices = [ '1', '2', '3', '4' ] ) self.button = wxButton ( self.panel, 100, 'Click' ) EVT_BUTTON ( self.panel, 100, self.click ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.combo, 0 ) self.sizer.Add ( self.button, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) def click ( self, event ): if self.combo.GetSelection() == -1: self.combo.userValue = self.combo.GetValue() else: self.combo.userValue = self.combo.GetStringSelection() print self.combo.userValue application = wxPySimpleApp() window = OurFrame() application.MainLoop()
blog comments powered by Disqus |
|
|
|
|
|
|
|