1

I am trying to get either the strings checked or the integers from a check list. I cannot seem to get it anywhere. In the code below, you'll see a bunch of un-commented code, those are just different ways I've tried. I thought I would leave them in case any one's suggestions have to do with it. I am very new to GUI-programming and wx. Thanks for your help.

import  wx


class Panel1(wx.Panel):
def __init__(self, parent, log):
    wx.Panel.__init__(self, parent, -1)

    allLoc = ['One', 'Two', 'Three', 'Four']

    wx.StaticText(self, -1, "Choose:", (45, 15))

    citList = wx.CheckListBox(self, -1, (60, 50), wx.DefaultSize, allLoc)

    #self.Bind(wx.EVT_CHECKLISTBOX, self.GetChecks, citList)

    #h = citList.GetChecked()

    #cities = ()

    #v = cities.append(h)
    #print h
    pos = citList.GetPosition().x + citList.GetSize().width + 25
    nextBtn = wx.Button(self, -1, "Next", (pos, 50))
    self.Bind(wx.EVT_BUTTON, wx.EvyRadBox2, nextBtn)

#def GetChecks(self, event):
    #r = citList.GetId()
    #print r

#def printChecks(self, event):
    #l = event.CetCheckStrings()
    #print l

def EvyRadBox2(self, event):
    filepath2 = "c:\\logger2.txt"
    file1 = open(filepath2, 'w')
    file1.write('%d \n' % event.GetChecked())
    file1.close()





app = wx.PySimpleApp()
frame = wx.Frame(None, -1, "Charlie")
Panel1(frame,-1)
frame.Show(1)
app.MainLoop()

**************************EDIT********************************

So I changed my code to look like this

import wx

checkedItems = []


class citPanel(wx.Panel):
def __init__(self, parent, id):
    wx.Panel.__init__(self, parent, id)
    allLoc = ['One', 'Two', 'Three', 'Four']

    wx.StaticText(self, -1, "Choose:", (45, 15))

    citList = wx.CheckListBox(self, -1, (60, 50), wx.DefaultSize, allLoc)

    checkedItems = [i for i in range(citList.GetCount()) if citList.IsChecked(i)]


class nextButton(wx.Button):
def __init__(self, parent, id, label, pos):
    wx.Button.__init__(self, parent, id, label, pos)




class checkList(wx.Frame):
def __init__(self, parent, id, title):
    wx.Frame.__init__(self, parent, id, title, size=(400, 400))

    panel = citPanel(self, -1)

    nextButton(panel, -1, 'Ok', (275, 50))

    self.Bind(wx.EVT_BUTTON, self.Clicked)

    self.Centre()
    self.Show(True)

def Clicked(self, event):
    print checkedItems
    event.Skip()


app = wx.App()
checkList(None, -1, 'Charlie')
app.MainLoop()

When I did this at first, when I clicked the button, It threw a global name not defined into wxstdout. I add the checkedlist at the top, and it at first showed none, now it shows an empty list., Any help, as always, thanks in advance

Kevin
  • 4,211
  • 10
  • 33
  • 40

1 Answers1

3
checkedItems = [i for i in range(citList.GetCount()) if citList.IsChecked(i)]

citList.GetChecked() should have also completed the task for you. May the problem be that you are trying to get selected items in __init__?

Upd.: You do not want to get checked items during __init__ - they cannot be checked by the user at that moment. You'd better check them in any event handler, e.g. wx.EVT_BUTTON.

Try writing self more often, e.g.:

self.citList = wx.CheckListBox(self, -1, (60, 50), wx.DefaultSize, allLoc)
# some code
self.panel = citPanel(self, -1)

and change Clicked to:

def Clicked(self, event):
    checkedItems = [i for i in range(self.panel.citList.GetCount()) if self.panel.citList.IsChecked(i)]
    print checkedItems
    event.Skip()

Hope this helps.

Li0liQ
  • 11,158
  • 35
  • 52
  • Could I bind that to the button? – Kevin Jan 04 '10 at 19:54
  • Sure, you can write something similar to `self.Bind(wx.EVT_BUTTON, self.EvyRadBox2, nextBtn)` for it (suppose, you are getting checked items in `self.EvyRadBox2`). – Li0liQ Jan 04 '10 at 19:59
  • When I run with with a console open, all I see is (), an empty tuple. I do not know if check are being read, I will want to pass them to something else, I just do not think I am capturing them. – Kevin Jan 04 '10 at 20:26
  • You can try using `wx.MessageBox('Some info to display', 'Info')` to show any information you like. – Li0liQ Jan 04 '10 at 20:49