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()