wxPython: Default Frame button?
Cliff Wells
logiplex at qwest.net
Mon Aug 4 14:24:53 EDT 2003
On Mon, 2003-08-04 at 06:22, Miki Tebeka wrote:
> Hello Cliff,
>
> > In general, the only child of a frame should be a panel or some other
> > container (like a splitter). Frames should generally only have one
> > child. Make the button a child of the panel rather than a sibling.
> 10x. Works like a charm.
>
> >class F(wx.Frame):
> > def __init__(self):
> > wx.Frame.__init__(self, None, -1, "Test Frame")
> > panel = P(self)
> > self.Fit()
>
> Is there a default frame that does the above?
No. However, you can combine the frame and panel code into a single
class if you like:
import wx
class F(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Test Frame")
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
b = wx.Button(panel, -1, "Quit")
wx.EVT_BUTTON(panel, b.GetId(), self.on_quit)
sizer.AddMany([
(wx.TextCtrl(panel, -1, size = (250, -1), value = "XXX")),
(b, 0, wx.EXPAND),
])
panel.SetDefaultItem(b)
b.SetFocus()
panel.SetAutoLayout(True)
panel.SetSizer(sizer)
sizer.Fit(panel)
self.Fit()
def on_quit(self, e):
self.Close(True)
def main():
app = wx.PySimpleApp()
f = F()
f.Show(True)
app.MainLoop()
if __name__ == "__main__":
main()
Alternatively, you can dispense with creating a custom class for the
frame (which is perhaps a bit closer to what you are asking):
import wx
class P(wx.Panel):
def __init__(self, parent, id = -1):
wx.Panel.__init__(self, parent, id)
sizer = wx.BoxSizer(wx.VERTICAL)
b = wx.Button(self, -1, "Quit")
wx.EVT_BUTTON(self, b.GetId(), lambda evt: parent.Close(True))
sizer.AddMany([
(wx.TextCtrl(self, -1, size = (250, -1), value = "XXX")),
(b, 0, wx.EXPAND),
])
self.SetDefaultItem(b)
b.SetFocus()
self.SetAutoLayout(True)
self.SetSizer(sizer)
sizer.Fit(self)
def main():
app = wx.PySimpleApp()
f = wx.Frame(None, -1, "Test Frame")
P(f)
f.Fit()
f.Show(True)
app.MainLoop()
if __name__ == "__main__":
main()
Personally, I prefer to keep objects discrete, especially for panels
which might at some point get moved to some other container (say you
decide to put a notebook or splitter in the frame), but if you're not
concerned about that then these are both valid approaches.
Regards,
--
Cliff Wells, Software Engineer
Logiplex Corporation (www.logiplex.net)
(503) 978-6726 (800) 735-0555
More information about the Python-list
mailing list