wxPython:TextCtrl在框架内另一个面板内的面板内部时不会获得焦点

时间:2012-04-06 19:55:01

标签: python focus wxpython

所以我设置了以下代码来演示问题:

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

运行此操作时,所有内容都会按预期显示,但两个wx.TextCtrls将无法获得焦点。删除额外的面板层时不是这种情况,但我无法避免使用额外的面板。

1 个答案:

答案 0 :(得分:1)

使用:

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

他们会得到关注。

在wxPython中,当你设计一个直接的继承行时,事情变得更好,有分支但没有交叉。由于您的testPanel位于属于mainPanel的sizer中,因此自然父级不是Frame(self),而是mainPanel,