WXPYTHON自定义控件中的怪异选项卡遍历行为



如果您将自定义控件作为wx.pycontrol的子类,则Tab Traversal将表现出奇怪的行为。例如,使用下面的代码,按下几次将使您卡在MyControl内。一旦标记为" MyControl的孩子"文本框,您只能在2个" MyControl的孩子"文本框之间进行选项,并且永远不会回到"面板的孩子"。

class MyFrame(wx.Frame):
  def __init__(self):
    super(MyFrame, self).__init__(None)
    panel = wx.Panel(self)
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(wx.TextCtrl(panel, value="Child of Panel"), flag=wx.EXPAND)
    sizer.AddSpacer(30)
    sizer.Add(MyControl(panel), flag=wx.EXPAND)
    panel.SetSizer(sizer)

class MyControl(wx.PyControl):
  def __init__(self, parent):
    super(MyControl, self).__init__(parent, style=wx.BORDER_NONE|wx.TAB_TRAVERSAL)
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(wx.TextCtrl(self, value="Child of MyControl"), flag=wx.EXPAND)
    sizer.AddSpacer(10)
    sizer.Add(wx.TextCtrl(self, value="Child of MyControl"), flag=wx.EXPAND)
    self.SetSizer(sizer)

修复标准方式以标准方式进行表现的标签遍历非常简单。您要做的就是使您的自定义控件子类WX.Panel而不是WX.PyControl。

class MyControl(wx.Panel):
  def __init__(self, parent):
    super(MyControl, self).__init__(parent)
    ...

最新更新