StatusBar on Mac
Nigel W. Moriarty
nw_moriarty at yahoo.com
Thu Aug 2 15:18:27 PDT 2007
Folks
A button in a wx.StatusBar is fine on Linux but on a Mac the bottom is clipped. I have attached a simple example.
Nigel
---
Nigel W. Moriarty
____________________________________________________________________________________
Boardwalk for $500? In 2007? Ha! Play Monopoly Here and Now (it's updated for today's economy) at Yahoo! Games.
http://get.games.yahoo.com/proddesc?gamekey=monopolyherenow
-------------- next part --------------
import wx
#import Images
#---------------------------------------------------------------------------
class PhenixStatusBar(wx.StatusBar):
def __init__(self, parent):
wx.StatusBar.__init__(self, parent, wx.NewId())
self.SetFieldsCount(5)
if wx.MAJOR_VERSION != 2: raise 'version'
if wx.MAJOR_VERSION == 2 and wx.MINOR_VERSION > 4:
self.SetStatusStyles([wx.SB_NORMAL,
wx.SB_NORMAL,
wx.SB_FLAT,
wx.SB_FLAT,
wx.SB_FLAT,
]
)
self.sizeChanged = False
wx.EVT_SIZE(self, self.OnSize)
wx.EVT_IDLE(self, self.OnIdle)
self.cb = wx.Button(self, wx.NewId(), "RUN")
wx.EVT_BUTTON(self, self.cb.GetId(), self.Run)
self.cb.Enable(False)
self.lb = wx.Button(self, wx.NewId(), "LOG")
wx.EVT_BUTTON(self, self.lb.GetId(), self.Log)
self.ss = wx.StaticText(self, wx.NewId(),
'',
(0,0)
)
self.Reposition()
def Run(self):
print 'run'
def Log(self):
print 'log'
def SetStatusGo(self):
self.cb.Enable(True)
def SetStatusStop(self):
self.cb.SetLabel("STOP")
def SetStatusDisable(self):
self.cb.Enable(False)
def SetStatusEnable(self):
self.cb.Enable(True)
def IsEnabled(self):
return self.cb.IsEnabled()
def SetStatusCaution(self):
self.cb.SetLabel("CONNECT")
def SetSecondaryText(self, label):
self.ss.SetLabel(label)
def SetFonts(self):
font = self.lb.GetFont()
font.SetPointSize(8)
self.lb.SetFont(font)
font = self.cb.GetFont()
font.SetPointSize(8)
self.cb.SetFont(font)
def OnSize(self, evt):
self.Reposition() # for normal size events
# Set a flag so the idle time handler will also do the repositioning.
# It is done this way to get around a buglet where GetFieldRect is not
# accurate during the wx.EVT_SIZE resulting from a frame maximize.
self.sizeChanged = True
def OnIdle(self, evt):
if self.sizeChanged:
self.Reposition()
# reposition the checkbox
def Reposition(self):
border = 0
rect = self.GetFieldRect(3)
self.cb.SetPosition(wx.Point(rect.x, rect.y))
self.cb.SetSize(wx.Size(rect.width+border, rect.height+border))
rect = self.GetFieldRect(2)
self.lb.SetPosition(wx.Point(rect.x, rect.y))
self.lb.SetSize(wx.Size(rect.width+border, rect.height+border))
rect = self.GetFieldRect(1)
self.ss.SetPosition(wx.Point(rect.x+border, rect.y+border))
self.ss.SetSize(wx.Size(rect.width-border, rect.height-border))
self.sizeChanged = False
self.SetStatusWidths([-1,350,100,100,30])
self.SetFonts()
###########################################################################
# Test loop
###########################################################################
if __name__ == '__main__':
class MyApp(wx.App):
def OnInit(self):
self.frame = wx.Frame(None,
wx.NewId(),
"TEST",
size = wx.Size(800,600),
)
self.sb = PhenixStatusBar(self.frame)
self.frame.SetStatusBar(self.sb)
self.frame.SetStatusText("Welcome to this test GUI")
self.frame.Show()
return True
app = MyApp(0)
app.MainLoop()
More information about the wxpython-users
mailing list