wxTreeListCtrl - column headers don't show until parent frame is resized

I spoke to soon. Now the status bar doesn't look right and it disappears
on occasion as the tree and the status bar are being updated.

This somewhat larger example has your suggestion commented out. If you
run it with the OnDocStructureSize code included you'll see what I mean.

jb

#Boa:Frame:mainFrame

from wxPython.wx import *
from wxPython.gizmos import *
import os, thread, threading, string, statvfs
import win32api, win32file

def create(parent):
    return mainFrame(parent)

[wxID_MAINFRAME, wxID_MAINFRAMESTATUSBAR1, wxID_MAINFRAMETREELISTCTRL1,
] = map(lambda _init_ctrls: wxNewId(), range(3))

class mainFrame(wxFrame):

    def _init_coll_menuBar1_Menus(self, parent):
        # generated method, don't edit

        parent.Append(menu=self.File, title=u'File')
        parent.Append(menu=self.Sort, title=u'Sort')
        parent.Append(menu=self.Help, title=u'Help')

    def _init_coll_treeListCtrl1_Columns(self, parent):
        parent.AddColumn(text='Directory')
        parent.AddColumn(text='Bytes')
        parent.AddColumn(text='Space Used')
        parent.AddColumn(text='Space Wasted')
        parent.AddColumn(text='Number of Files')

    def _init_coll_statusBar1_Fields(self, parent):
        parent.SetFieldsCount(1)
        parent.SetStatusText(i=0, text=u'Status Text')
        parent.SetStatusWidths([-1])

    def _init_utils(self):
        self.menuBar1 = wxMenuBar()
        self.File = wxMenu(title='')
        self.Help = wxMenu(title='')
        self.Sort = wxMenu(title='')
        self._init_coll_menuBar1_Menus(self.menuBar1)

    def _init_ctrls(self, prnt):
        wxFrame.__init__(self, id=wxID_MAINFRAME, name=u'mainFrame',
              parent=prnt, pos=wxPoint(377, 263), size=wxSize(513, 312),
              style=wxDEFAULT_FRAME_STYLE, title=u'Tree Space')
        self._init_utils()
        self.SetClientSize(wxSize(505, 285))
        self.SetMenuBar(self.menuBar1)

        self.statusBar1 = wxStatusBar(id=wxID_MAINFRAMESTATUSBAR1,
              name='statusBar1', parent=self, style=0)
        self.statusBar1.SetPosition(wxPoint(0, 374))
        self.statusBar1.SetSize(wxSize(474, 20))
        self._init_coll_statusBar1_Fields(self.statusBar1)
        self.SetStatusBar(self.statusBar1)

        self.treeListCtrl1 = wxTreeListCtrl(id=wxID_MAINFRAMETREELISTCTRL1,
              name='treeListCtrl1', parent=self, pos=wxPoint(0, 0),
              size=wxSize(505, 246), style=wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,
              validator=wxDefaultValidator)
        self._init_coll_treeListCtrl1_Columns(self.treeListCtrl1)

    def __init__(self, parent):
        self.threads = {}
        self._init_ctrls(parent)
        self.treeListCtrl1.SetMainColumn(0) # the one with the tree in it...
        rootitem=self.treeListCtrl1.AddRoot("Root")

## def OnDocStructureSize(evt, ctrl=self.treeListCtrl1):
## ctrl.SetSize(evt.GetSize())
## EVT_SIZE(self, OnDocStructureSize)

        for d in string.splitfields(win32api.GetLogicalDriveStrings(),'\000'):
            if win32file.GetDriveType(d) == win32file.DRIVE_FIXED:
                self.threads[thread.start_new_thread(self.dowalktree,(d,rootitem))]=1
        
    def dowalktree(self, basedir, parenttreeitem):
        sec, byt, fre, tot = win32api.GetDiskFreeSpace(basedir)
        blocksize = sec * byt
        self.walktree(basedir,parenttreeitem, blocksize)
        self.statusBar1.SetStatusText("" + basedir)
        
    def walktree(self, basedir, parenttreeitem, blocksize):
        bytes = spaceused = numfiles = 0
        bn=os.path.basename(basedir)
        if bn == '': bn = basedir
        treeitem=self.treeListCtrl1.AppendItem(parenttreeitem, bn)
        self.statusBar1.SetStatusText("Browsing ... " + basedir)
        try:
            for f in os.listdir(basedir):
                fp=os.path.join(basedir,f)
                if os.path.isdir(fp):
                    b,s, n = self.walktree(fp,treeitem,blocksize)
                    bytes += b
                    spaceused += s
                    numfiles += n
                elif os.path.isfile(fp):
                    b=os.path.getsize(fp)
                    s=(divmod(b,blocksize)[0] * blocksize) + (divmod(b,blocksize)[1]>0) * blocksize
                    bytes+=b
                    spaceused += s
                    numfiles += 1
        except:
            self.treeListCtrl1.SetItemText(treeitem,bn + " [Access Denied]")
            pass
        self.treeListCtrl1.SetItemText(treeitem,str(bytes),1)
        self.treeListCtrl1.SetItemText(treeitem,str(spaceused),2)
        self.treeListCtrl1.SetItemText(treeitem,str(spaceused-bytes),3)
        self.treeListCtrl1.SetItemText(treeitem,str(numfiles),4)

        return bytes, spaceused, numfiles

class BoaApp(wxApp):
    def OnInit(self):
        self.main = create(None)
        self.SetTopWindow(self.main)
        self.main.Show()
        return True

application = BoaApp(0)
application.MainLoop()