Simple wxPython SetLabel question

Cédric Lucantis omer at no-log.org
Thu Jun 19 06:06:42 EDT 2008


Le Thursday 19 June 2008 11:48:54 dp_pearce, vous avez écrit :
> Hi All,
>
> Apologies if this should be seriously obvious. But I am quite new to
> Python and it is not quite so obvious yet.
>
> I have a GUI which will eventually load and display database
> information. I want the user to be able to browse for a database and
> then load it. My problem relates to how I set the value of a TextCtrl
> once the user has selected the database they wish to load.
>
> Here is a snip of my code:
>
> import wx
> import os
>
> class TestFrame(wx.Frame):
>     def __init__(self):
>         wx.Frame.__init__(self, None, -1, "Code Snip")
>         panel       = wx.Panel(self)
>
>         databaseLbl = wx.StaticText(panel, -1, "Database:")
>         database    = wx.TextCtrl(panel, -1, "")
>         databaseBtn = wx.Button(panel, -1, "Browse")
>         self.Bind(wx.EVT_BUTTON, self.OnBrowse, databaseBtn)
>         fetchSizer  = wx.BoxSizer(wx.HORIZONTAL)
>         fetchSizer.Add(databaseLbl)
>         fetchSizer.Add(database, -1, wx.LEFT |wx.RIGHT, 5)
>         fetchSizer.Add(databaseBtn)
>
>         panel.SetSizer(fetchSizer)
>
>     def OnBrowse(self, event):
>         wildcard = "Access Database (*.mdb) | *.mdb | Access Database
> (*.MDB) | *.MDB | All Files (*.*) | *.*"
>         dialog   = wx.FileDialog(None, "Choose an database",
> os.getcwd(), "", wildcard, wx.OPEN)
>
>         if dialog.ShowModal() == wx.ID_OK:
>             path = dialog.GetPath()
>             #########################################
>             # NOW SET TEXTCTRL "database" TO "path"
>             panel.database.SetLabel(path)
>             #########################################
>         dialog.Destroy()
>
> app = wx.PySimpleApp()
> TestFrame().Show()
> app.MainLoop()
>
> The current code returns that "global name 'panel' is not defined" 

'panel' is local to your __init__ function, so it's not available elsewhere. 
You should store it as an instance attribute instead :

# in __init__:
self.panel = wx.Panel(self)

# in OnBrowse
self.panel.database.SetLabel(patrh)

note that unlike some other languages, panel and self.panel are two distinct 
variables, so you should replace _all_ references to panel by self.panel.

-- 
Cédric Lucantis



More information about the Python-list mailing list