【问题标题】:Weird tab traversal behavior in wxPython custom controlwxPython自定义控件中奇怪的选项卡遍历行为
【发布时间】:2017-10-02 19:29:51
【问题描述】:

如果您将自定义控件作为 wx.PyControl 的子类,则选项卡遍历将表现异常。例如,使用下面的代码,按几次 Tab 键会让你卡在 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)

【问题讨论】:

    标签: python-2.7 wxpython wxwidgets


    【解决方案1】:

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

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

    【讨论】:

    • 是的,TAB 导航是由wxPanel 实现的,如其描述中所述。
    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2013-06-11
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多