views:

1302

answers:

1

I didn't find a better way to change the different choices in a wx.ComboBox() than swap the old ComboBox with a new one. Is there a better way?

Oerjan Pettersen

#!/usr/bin/python

#20_combobox.py

import wx
import wx.lib.inspection

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
     wx.Frame.__init__(self, *args, **kwargs)

     self.p1 = wx.Panel(self)
     lst = ['1','2','3']
     self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)

     self.st.Bind(wx.EVT_COMBOBOX, self.text_return)


    def text_return(self, event):
     lst = ['3','4']
     self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)


class MyApp(wx.App):
    def OnInit(self):
     frame = MyFrame(None, -1, '20_combobox.py')
     frame.Show()
     self.SetTopWindow(frame)
     return 1

if __name__ == "__main__":
    app = MyApp(0)
#    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()
+7  A: 

wx.ComboBox derives from wx.ControlWithItems, which has methods for Appending, Clearing, Inserting and Deleting items, all of these methods are available on wx.ComboBox.

One way to do what you want would be to define the text_return() method as follows:

def text_return(self, event):
    self.st.Clear()
    self.st.Append('3')
    self.st.Append('4')
Moe
or self.sf.AppendItems(['3', '4'])
Toni Ruža
@Toni Cool I was looking for that - but for some reason that function isn't documented.
Moe
Thanks. AppendItems is in the new docs, but not in the old ones.
Orjanp