glittershark
glittershark

Reputation: 544

wxPython: TextCtrl doesn't ever receive focus when inside a panel inside another panel inside a frame

So I have the following code set up to demonstrate the problem:

import wx


class testPanel(wx.Panel):
    def __init__(self, parent):
        super(testPanel, self).__init__(parent)
        self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.txt = wx.TextCtrl(self, style=wx.TE_MULTILINE)

        self.hsizer.Add(self.txt, proportion=1,
            flag=wx.EXPAND)
        self.SetSizer(self.hsizer)

        self.hsizer.Fit(self)
        self.Show(True)


class testFrame(wx.Frame):
    def __init__(self, parent):
        super(testFrame, self).__init__(parent)
        self.mainPanel = wx.Panel(self)
        self.vsizer = wx.BoxSizer(wx.VERTICAL)

        self.txt1 = testPanel(self)
        self.txt2 = testPanel(self)

        self.vsizer.Add(self.txt1, proportion=1,
            flag=wx.EXPAND)
        self.vsizer.Add(self.txt2, proportion=1,
            flag=wx.EXPAND)
        self.mainPanel.SetSizer(self.vsizer)

        self.vsizer.Fit(self.mainPanel)

        self.mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.mainSizer.Add(self.mainPanel, proportion=1,
            flag=wx.EXPAND)
        self.SetSizer(self.mainSizer)
        self.mainSizer.Fit(self)

        self.Show(True)

app = wx.PySimpleApp()
frame = testFrame(None)
frame.Show(True)
app.MainLoop()

When this is run, everything displays as expected, but the two wx.TextCtrls won't receive focus ever. This isn't the case when the extra layer of panel is removed, but I can't avoid having that extra panel.

Upvotes: 1

Views: 661

Answers (1)

joaquin
joaquin

Reputation: 85693

Use:

self.txt1 = testPanel(self.mainPanel)
self.txt2 = testPanel(self.mainPanel)

and they will get focus.

In wxPython things go better when you design a straight line of inheritance, with branches but without crossovers. As your testPanels are in a sizer that belongs to mainPanel, the natural parent is not the Frame (self) but mainPanel,

Upvotes: 1

Related Questions