wxPython ListBox Demo

vegaseat 2 Tallied Votes 3K Views Share

The wxPython library allows Python to create Windows GUI programs. Here is a look at the listbox component. Click a button to load the listbox with names, select the name by clicking on it on the list, and display it in the title bar of the window frame. Another button clears the listbox.

Gribouillis commented: Great example ! +13
# load a listbox with names, select a name and display in title
# experiments with wxPython  by  vegaseat  20mar2005
# Python v2.4 and wxPython v2.5

# If you have not already done so, install Python 2.4 first.
# I used  python-2.4.1c2.msi  (this is the self-extracting
# MS-Installer file) from http://www.python.org
# Then install  wxPython2.5-win32-unicode-2.5.4.1-py24.exe
# from: http://prdownloads.sourceforge.net/wxpython/
# (if you don't get into unicode, download the ansi version)
# note: python-2.4.1c2.msi  should soon be python-2.4.1.msi
  
import wx

def create(parent):
    return Frame1(parent)

# assign ID numbers
[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1LISTBOX1, 
] = [wx.NewId() for _init_ctrls in range(4)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # BOA generated methods
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(358, 184), size=wx.Size(299, 387),
              style=wx.DEFAULT_FRAME_STYLE, title=u'ListBox Test ...')
        self.SetClientSize(wx.Size(291, 347))
        self.SetBackgroundColour(wx.Colour(0, 128, 0))

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label=u'Load ListBox',
              name='button1', parent=self, pos=wx.Point(8, 8), size=wx.Size(176,
              28), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
              id=wxID_FRAME1BUTTON1)

        self.listBox1 = wx.ListBox(choices=[], id=wxID_FRAME1LISTBOX1,
              name='listBox1', parent=self, pos=wx.Point(8, 48),
              size=wx.Size(184, 256), style=0)
        self.listBox1.SetBackgroundColour(wx.Colour(255, 255, 128))
        self.listBox1.Bind(wx.EVT_LISTBOX, self.OnListBox1Listbox,
              id=wxID_FRAME1LISTBOX1)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label=u'Clear',
              name='button2', parent=self, pos=wx.Point(104, 312),
              size=wx.Size(87, 28), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnButton2Button,
              id=wxID_FRAME1BUTTON2)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnButton1Button(self, event):
        '''
        click button to load the listbox with names
        '''
        self.listBox1.Append("Andreas")
        self.listBox1.Append("Erich")
        self.listBox1.Append("Udo")
        self.listBox1.Append("Jens")
        self.listBox1.Append("Bjorn")
        self.listBox1.Append("Heidrun")
        self.listBox1.Append("Ulla")
        self.listBox1.Append("Volger")
        self.listBox1.Append("Helmut")
        self.listBox1.Append("Freja")
        self.SetTitle("Select a name ...")
    
    def OnListBox1Listbox(self, event):
        '''
        click list item and display the selected string in frame's title
        '''
        selName = self.listBox1.GetStringSelection()
        self.SetTitle(selName)
        
    def OnButton2Button(self, event):
        '''
        click button to clear the listbox items
        '''
        self.listBox1.Clear()

#--------------- end of class Frame1 --------------------

# program entry point ...
if __name__ == '__main__':
    app = wx.PySimpleApp()
    wx.InitAllImageHandlers()
    frame = create(None)
    frame.Show()

    app.MainLoop()
vegaseat 1,735 DaniWeb's Hypocrite Team Colleague

You can run this program with version 2.3 of Python, but you need version 2.5 of wxPython (introduces bind)!

vegaseat 1,735 DaniWeb's Hypocrite Team Colleague

Python does support unicode (slavic, chinese etc. characters), but if you never get into foreign languages, you can simply download the ansi flavor of wxPython. Ansi does support french, german, spanish, and some greek characters.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.