wxChoice Here is how a basic wxChoice control is put into an application: wxChoice ( self, -1, choices = [ 'A', 'B', 'C', 'D' ] ) Note that self is the parent, and -1 is the same as wxID_ANY. The list we provide at the end is, of course, the list of options availible to the user. Let's put our control in an application so that we can work with it: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) application = wxPySimpleApp() window = OurFrame() application.MainLoop() Currently, nothing is selected on default. However, suppose we want the second option to be selected on default. We can do this with wxChoice's SetSelection method. It accepts one argument, which is the position it should start at. “Choice A” is 0, and it increments from there. Let's force “Choice B” to be selected: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) self.choice.SetSelection ( 1 ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) application = wxPySimpleApp() window = OurFrame() application.MainLoop() What if, however, we don't know the position of the string we want to select? This is easily solved. Let's select “Choice C” without directly passing its position: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) positionC = self.choice.FindString ( 'Choice C' ) self.choice.SetSelection ( positionC ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) application = wxPySimpleApp() window = OurFrame() application.MainLoop() The GetString method is the opposite of FindString. It accepts a position and returns the string in that position: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) stringC = self.choice.GetString ( 2 ) positionC = self.choice.FindString ( stringC ) self.choice.SetSelection ( positionC ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) application = wxPySimpleApp() window = OurFrame() application.MainLoop() We can manipulate the items in the list using a variety of methods: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) # Delete an item ( "Choice A" ) self.choice.Delete ( 0 ) # Delete everything self.choice.Clear() # Add a few choices back self.choice.Append ( 'Choice E' ) self.choice.Append ( 'Choice F' ) self.choice.Append ( 'Choice G' ) # Replace a choice ( "Choice F" ) self.choice.SetString ( 1, 'Choice X' ) # Count the items itemNum = self.choice.GetCount() self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) application = wxPySimpleApp() window = OurFrame() application.MainLoop() Finally, we are left with the task of extracting what the user selected. This is extremely simple, fortunately: from wxPython.wx import * class OurFrame ( wxFrame ): def __init__ ( self ): wxFrame.__init__ ( self, None, -1, 'wxPython' ) self.panel = wxPanel ( self, -1 ) self.choice = wxChoice ( self.panel, -1, choices = [ 'Choice A', 'Choice B', 'Choice C', 'Choice D' ] ) self.button = wxButton ( self.panel, 100, 'Submit' ) EVT_BUTTON ( self.panel, 100, self.click ) self.sizer = wxBoxSizer ( wxVERTICAL ) self.sizer.Add ( self.choice, 0 ) self.sizer.Add ( self.button, 0 ) self.panel.SetSizerAndFit ( self.sizer ) self.Show ( True ) def click ( self, event ): # Display the position of the selection print self.choice.GetSelection() # Display the selection print self.choice.GetStringSelection() application = wxPySimpleApp() window = OurFrame() application.MainLoop() You can also use EVT_COMBOBOX, which calls the function passed to it when the user selects a new option.
blog comments powered by Disqus |
|
|
|
|
|
|
|