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