Hi, I’m trying to build a dynamic scrolledPanel for my application.
I have a wx.CheckBox and a wx.StaticText, wrapped in a horizontal sizer, that I want to put in a list called here sizerRefs
. In my app, depending on user input, I want to display one or more of these sizers on the scrolledPanel. But, for some reason, my app is display all of them without my command. The result is the last sizer appering on top of everyone else.
Is there a way I can make this work?
Thanks!
Expected result:
import wx
import wx.lib.scrolledpanel as scrolled
class WaterDataBase(wx.Frame):
def __init__(self, parent):
style = wx.DEFAULT_FRAME_STYLE & (~wx.MAXIMIZE_BOX)
wx.Frame.__init__(self, parent, style=style)
self.sizerRefs = []
self.setupSizers()
self.populateRefs()
self.appendWordSizer(2)
def setupSizers(self):
self.masterSizer = wx.BoxSizer(wx.HORIZONTAL)
self.itemsSizer = wx.BoxSizer(wx.VERTICAL)
self.scrolled_panel = scrolled.ScrolledPanel(self, -1, style=wx.SUNKEN_BORDER, size=(400, 400))
self.scrolled_panel.SetupScrolling()
self.scrolled_panel.SetSizer(self.itemsSizer)
self.masterSizer.Add(self.itemsSizer)
def initWordSizer(self, word):
sizer = wx.BoxSizer(wx.HORIZONTAL)
checkBox = wx.CheckBox(self, -1)
text = wx.StaticText(self, -1, word)
sizer.Add(checkBox)
sizer.Add(text)
self.sizerRefs.append(sizer)
def populateRefs(self):
words = "I'm trying to make this work, please.".split()
for word in words:
self.initWordSizer(word)
def appendWordSizer(self, index):
self.itemsSizer.Add(self.sizerRefs[index])
self.SetSizer(self.masterSizer)
app = wx.App()
frame = WaterDataBase(None).Show()
app.MainLoop()