Using wxPython for Windows GUI programming

vegaseat 2 Tallied Votes 282 Views Share

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()
vegaseat 1,735 DaniWeb's Hypocrite Team Colleague

You may want to update from Python23 to Python24:
Install the Python 2.4 compiler first.
I used python-2.4.1.msi (this is the MS-Installer file)
from http://www.python.org
then install wxPython2.5-win32-ansi-2.5.4.1-py24.exe
from: http://prdownloads.sourceforge.net/wxpython/

Stefano Mtangoo 455 Senior Poster

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()

pyphil 0 Newbie Poster

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

frame.Show()

just before

app.MainLoop()
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.