2017-10-02 6 views
0

カスタムコントロールをwx.PyControlのサブクラスとして作成すると、タブトラバーサルが奇妙に動作します。たとえば、以下のコードでは、Tabキーを数回押すと、MyControlの内部に入り込むことになります。 「MyControlの子」テキストボックスにタブすると、2つの「MyControlの子」テキストボックスの間をタブするだけで、「子パネルの」タブに戻ることはありません。wxPythonカスタムコントロールの奇妙なタブトラバース動作

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) 

答えて

0

タブトラバーサルを標準的な方法で固定することは驚くほど簡単です。 wx.PyControlの代わりにカスタムコントロールサブクラスwx.Panelを作成するだけです。

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

はい、TABナビゲーションは、その説明で説明したように[wxPanel](http://docs.wxwidgets.org/3.1.0/classwx_panel.html)によって実装されています。 –