Newbie has a statusbar problem
Regan Tackett
regantackett at comcast.net
Sun Nov 4 10:00:34 PST 2007
> > Hi Regan,
> >
> > I've attached a little demo.
> >
> > My demo doesn't use so many class like your but I think you like it.
> > I've use wx.RadioBox insted RadioButton but I think it's the same thing
> >
> Giuseppe
> Python-it.org
Thanks for the reply. I understand how your code works. However, your code
doesn't use a separate class for the panel that you create, I my code
(unfortunately) does. Therefore, your "self" refers to the frame instance, and
the "self" in my panel class refers to the panel's "self".
In the following snippet, I have cleaned up and shortened the code that I
previously posted and created a reference to the frame's instance in my panel
class. I then pass that to the "SetStatusBarText" class as the parent. This
does change the status bar text like I want, but now it creates a separate,
blank statusbar at the top of my panel!!! I don't understand why this is
happening.
Does anyone have any suggestions as to how to change the text on the statusbar
from a class that inherits wx.Panel? There has to be an easy way, but I'm a
newbie and just don't see it. Thanks.
#!/usr/bin/env python
import wx
class GUI(wx.App):
def OnInit(self):
self.frame = Frame(None, title = "myGUI", size = (400, 300))
self.frame.CenterOnScreen()
self.frame.Show()
self.SetTopWindow(self.frame)
return True
class Frame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.SetMinSize(kwargs["size"])
self.statusBar = self.CreateStatusBar()
self.SetStatusBar(self.statusBar)
self.panel = MyPanel(self, wx.ID_ANY)
class MyPanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
self.frame = args[0] # I create a reference to the frame here
# Creates a sizer holding the radiobuttons
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.mainSizer.Add(self.createRadioButton1(), 0, wx.ALL, 5)
self.mainSizer.Add(self.createRadioButton2(), 0, wx.ALL, 5)
self.SetSizerAndFit(self.mainSizer)
self.Layout()
def createRadioButton1(self):
# Creates radiobutton 1
self.RadioButton1 = wx.RadioButton(self, wx.ID_ANY, "Button 1", \
style = wx.RB_GROUP)
self.RadioButton1.Bind(wx.EVT_RADIOBUTTON, self.onRadio)
return self.RadioButton1
def createRadioButton2(self):
# Creates radiobutton 2
self.RadioButton2 = wx.RadioButton(self, wx.ID_ANY, "Button 2")
self.RadioButton2.Bind(wx.EVT_RADIOBUTTON, self.onRadio)
return self.RadioButton2
def onRadio(self, event):
"""
Event handler for radiobutton 2
If button 2 is clicked, I want a message to appear
on the status bar.
"""
radioSelected = event.GetEventObject()
if radioSelected.GetLabel() == "Button 2":
###############################################
self.statusBar = SetStatusBarText(self.frame, "Radio button 2 is activated")
# I pass in the frame as the parent
# For some reason, this creates a separate and blank
# statusbar on the top of my panel.
###############################################
else:
pass
class SetStatusBarText(wx.StatusBar):
"""
I pass in the frame as the parent and the text that
I want to be displayed.
"""
def __init__(self, parent, text):
wx.StatusBar.__init__(self, parent)
parent.SetStatusText(text)
# "parent" is the frame instance
if __name__ == "__main__":
app = GUI()
app.MainLoop()
More information about the wxpython-users
mailing list