wxPython自定义控件中奇怪的tab遍历行为

时间:2017-10-02 19:29:51

标签: python-2.7 wxpython wxwidgets

如果将自定义控件作为wx.PyControl的子类,则制表符遍历将表现得很奇怪。例如,使用下面的代码,按Tab键几次会让你陷入MyControl。一旦你选择了“Child of MyControl”文本框,你就只能在2个“MyControl之子”文本框之间进行选项卡,并且永远不会选择回“Panel of Child”。

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)

1 个答案:

答案 0 :(得分:0)

将标签遍历修复为以标准方式运行非常简单。您所要做的就是使自定义控件子类wx.Panel而不是wx.PyControl。

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