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
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
selfmore often, e.g.:and change
Clickedto:Hope this helps.