2

Take a look at a typical Windows GUI frame (form) with a menubar, statusbar, panel, label and buttons. Set the font and size of text, click the buttons to create some events. All of this and much more is in the free wxPython package.

# using a wx.Frame, wx.MenuBar, wx.Menu, wx.Panel, wx.StaticText, wx.Button, 
# and a wx.BoxSizer to show a rudimentary wxPython Windows GUI application
# wxPython package from: http://prdownloads.sourceforge.net/wxpython/
# I downloaded: wxPython2.5-win32-ansi-2.5.3.1-py23.exe
# if you have not already done so install the Python compiler first
# I used  Python-2.3.4.exe  (the Windows installer package for Python23) 
# from http://www.python.org/2.3.4/
# tested with Python23      vegaseat      24jan2005

import wx


class Frame1(wx.Frame):
    # create a simple windows frame (sometimes called form)
    # pos=(ulcX,ulcY)  size=(width,height) in pixels

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, pos=(150, 150), size=(350, 250))

        # create a menubar at the top of the user frame
        menuBar = wx.MenuBar()

        # create a menu ... 
        menu = wx.Menu()

        # ... add an item to the menu
        # \tAlt-X creates an accelerator for Exit (Alt + x keys)
        # the third parameter is an optional hint that shows up in 
        # the statusbar when the cursor moves across this menu item
        menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit the program")

        # bind the menu event to an event handler, share QuitBtn event
        self.Bind(wx.EVT_MENU, self.OnQuitButton, id=wx.ID_EXIT)

        # put the menu on the menubar
        menuBar.Append(menu, "&File")
        self.SetMenuBar(menuBar)

        # create a status bar at the bottom of the frame
        self.CreateStatusBar()

        # now create a panel (between menubar and statusbar) ...
        panel = wx.Panel(self)

        # ... put some controls on the panel
        text = wx.StaticText(panel, -1, "Hello World!")
        text.SetFont(wx.Font(24, wx.SCRIPT, wx.NORMAL, wx.BOLD))
        text.SetSize(text.GetBestSize())
        quitBtn = wx.Button(panel, -1, "Quit")
        messBtn = wx.Button(panel, -1, "Message")

        # bind the button events to event handlers
        self.Bind(wx.EVT_BUTTON, self.OnQuitButton, quitBtn)
        self.Bind(wx.EVT_BUTTON, self.OnMessButton, messBtn)

        # use a sizer to layout the controls, stacked vertically
        # with a 10 pixel border around each
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL, 10)
        sizer.Add(quitBtn, 0, wx.ALL, 10)
        sizer.Add(messBtn, 0, wx.ALL, 10)
        panel.SetSizer(sizer)
        panel.Layout()


    def OnQuitButton(self, evt):
        # event handler for the Quit button click or Exit menu item
        print "See you later alligator! (goes to stdout window)"
        wx.Sleep(1)    # 1 second to look at message
        self.Close()

    def OnMessButton(self, evt):
        # event handler for the Message button click
        self.SetStatusText('101 Different Ways to Spell "Spam"')


class wxPyApp(wx.App):
    def OnInit(self):
        # set the title too
        frame = Frame1(None, "wxPython GUI 2")
        self.SetTopWindow(frame)
        frame.Show(True)
        return True
        
# get it going ...
app = wxPyApp(redirect=True)
app.MainLoop()

3
Contributors
3
Replies
9
Views
12 Years
Discussion Span
Last Post by pyphil
0

I have written the program but menu doesn,t show up!
What is wrong?
code

import wx

class MyFrame(wx.Frame):
def __init__(self, parent,id,title):
wx.Frame.__init__(self, parent,id,title,size=(250,150))

menuBar=wx.MenuBar()
file=wx.Menu()
file.Append(-1,'Quit','Quit application')
menuBar.Append(file,'&File')
self.SetMenuBar=(menuBar)

panel = wx.Panel(self, -1)
statusBar = self.CreateStatusBar()
self.Centre()
self.Show(True)

app=wx.App()
MyFrame(None,-1,'Simple Menu')
app.MainLoop()

2

i know this is an old thread, but you need to add

frame.Show()

just before

app.MainLoop()
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.