Use tab key for change textctrl

Hi all,

I am a new user of wxPython and I write a little gui for take some
information with textctrl and save it into a file.

I have a strange problem, I cannot change focus between the textctrl
with the tab key, I must use the mouse for point the focus into the text
ctrl.

I make a mistake or by default this function is able?

Thanks Andrea
My code:

class MainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition,
wx.Size(500, 400))
  
# Create MenuBar
        menubar = wx.MenuBar()
# Create item Menu of MenuBar
        file = wx.Menu()
        edit = wx.Menu()
        help = wx.Menu()
#File menu items
        file.Append(101, '&Open\tCtrl+O', 'Open document...')
        file.Append(102, '&Save\tCtrl+S', 'Save document...')
        file.AppendSeparator()
        quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit Kory
Application')
        file.AppendItem(quit)
#Edit menu ites
        edit.Append(201, 'Wiev List', 'Wiev list mode')#,
kind=wx.ITEM_CHECK)
        edit.Append(202, 'Wiev Tree', 'Wiev tree mode')#,
kind=wx.ITEM_CHECK)
# Sub menu of edit items
        submenu = wx.Menu()
        submenu.Append(301, 'Red', kind=wx.ITEM_RADIO)
        submenu.Append(302, 'Blue', kind=wx.ITEM_RADIO)
        submenu.Append(303, 'Yellow', kind=wx.ITEM_RADIO)
        edit.AppendMenu(203, 'Set Colors', submenu)
#Help menu items
  help.Append(401, '&About\tCtrl+A', 'About Kory Application')
#Attach menu to the menubar
        menubar.Append(file, '&File')
        menubar.Append(edit, '&Edit')
        menubar.Append(help, '&Help')
        self.SetMenuBar(menubar)
        self.Centre()
#Attach the menu-event to the method
        self.Bind(wx.EVT_MENU, self.OnSave, id=102)
        self.Bind(wx.EVT_MENU, self.OnAbout, id=401)
        self.Bind(wx.EVT_MENU, self.OnQuit, id=105)
#Create and customize StatusBar
  self.CreateStatusBar()
  self.SetStatusText('Kory Application...')
#Add panel between menubar and statusbar
  self.panel = wx.Panel(self)
#Create control on the panel
  nameLbl = wx.StaticText(self, -1, 'Ragione Sociale:', pos = (0, 15))
  localLbl = wx.StaticText(self, -1, 'Totale costo locali:', pos = (0,
45))
  scontolocalLbl = wx.StaticText(self, -1, 'Sconto locali:', pos =(0,
75))
  self.name = wx.TextCtrl(self, -1, '', pos = (200,15), size = (200, -1))
  self.local = wx.TextCtrl(self, -1, '', pos = (200, 45))
  self.scontolocal = wx.TextCtrl(self, -1, '', pos = (200, 75))
#Create control buttom
  b = wx.Button(self, -1, 'Save', pos = (0, 300))
  self.Bind(wx.EVT_BUTTON, self.OnSave, b)

#Create event def section
    
    def OnSave(self, event):
#Get value from user
      rag_soc = self.name.GetValue()
      tot_local = self.local.GetValue()
      scontolocal_mr = self.scontolocal.GetValue()
#Create a dictionary for save data into a file
      self.data = {}
  self.data['Ragione_Sociale'] = rag_soc
  self.data['Costo_Locali'] = tot_local
  self.data['Sconto_mr_locali'] = scontolocal_mr
      self.dirname = ''
      dlg = wx.FileDialog(self, "Chose a file", self.dirname, '', '*.*',
wx.SAVE)
      if dlg.ShowModal() == wx.ID_OK:
        self.filename = dlg.GetFilename()
        self.dirname = dlg.GetDirectory()
        f = open(os.path.join(self.dirname, self.filename), 'w')
        pickle.dump(self.data, f)
        f.close()
      dlg.Destroy

    def OnQuit(self, event):
        self.Close()

    def OnAbout(self, event):
      msg = "This is the Kory application for analisys of calls cost.\n"
+ \
              "Author: Andrea Marin @ 02 Apr 2007\n" + \
              "Please report any Bug/Requests of improvements\n" + \
              "to me at the following adresses:\n\n" + \
              "amarin@mr-service.it\n" + "baba-andrea@jabber.org\n\n" +
\
              "GUI with wxPython " + wx.VERSION_STRING + " !!!"
              
        dlg = wx.MessageDialog(self, msg, "About panel Kory
application",
              wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
  
class MyApp(wx.App):
    def OnInit(self):
      frame = MainWindow(None, -1, 'Welcome to Kory Application')
        frame.Show(True)
        return True

app = MyApp()
app.MainLoop()

Hi Andrea,

<snip>
<snap>

#Add panel between menubar and statusbar
       self.panel = wx.Panel(self)
#Create control on the panel
       nameLbl = wx.StaticText(self, -1, 'Ragione Sociale:', pos = (0, 15))

                                               ^^^^^

Your controls should be children of self.panel, not self. You are
putting a panel in your main frame (which is the right thing to do),
but all your controls are children of "self" instead of "self.panel".
Try to change them in this way:

nameLbl = wx.StaticText(self.panel, -1, 'Ragione Sociale:', pos = (0, 15))

Also, try to avoid using absolute positioning (i.e., using explicitely
pos=(0, 15)), try to fight against sizer to learn them. If you
distribute your application to someone else who has different settings
in the PC (resolution, screen size and whatever), absolute positioning
will kill your application and make it look bad on those PCs.
This is just a suggestion.

   def OnAbout(self, event):
       msg = "This is the Kory application for analisys of calls cost.\n"
+ \
             "Author: Andrea Marin @ 02 Apr 2007\n" + \
             "Please report any Bug/Requests of improvements\n" + \
             "to me at the following adresses:\n\n" + \
             "amarin@mr-service.it\n" + "baba-andrea@jabber.org\n\n" +
\
             "GUI with wxPython " + wx.VERSION_STRING + " !!!"

I seem to recognize the style of the "About" string :smiley: :smiley:

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.virgilio.it/infinity77/

···

On 4/3/07, Andrea wrote: