質問

これはかなり基本的な質問でなければならないと思いますが、私はここではここに進む:私はtextctrlを持っていて、私はかなり基本的なイベントのシーケンスを持っています:1)ユーザーはフォーカスを移動しますフックまたはクルックによるコントロール。2)ユーザーはtextctrlに何かを入力します。3)ユーザーは戻り値またはタブを押します。4)この時点で、コードはTextCtrlのテキストをつかみます。

誰かがこれを行う方法を教えてもらえますか?それは私にとって非常に基本的なようですが、私はどこにでも答えを見つけることができません。私が明らかな何かを逃したらすみません。

役に立ちましたか?

解決

これを正しく機能させるには、キーイベントをキャッチして、ユーザーがEnterキーまたはTabキーを押したかどうかを確認する必要があります。既に述べたように、タブがすべてのプラットフォームで正しく機能するようになるために、ウィジェットはパネルの子である必要があります。これがかなり簡単な例です:

import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.text = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.text.Bind(wx.EVT_KEY_DOWN, self.onEnter)
        btn = wx.Button(self, label="Do something")
        self.text.SetFocus()

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.text, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        self.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onEnter(self, event):
        """"""
        keycode = event.GetKeyCode()
        if keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER or keycode == wx.WXK_TAB:
            self.process_text(event=None)
            event.EventObject.Navigate()
        event.Skip()

    #----------------------------------------------------------------------
    def process_text(self, event):
        """
        Do something with the text
        """
        text = self.text.GetValue()
        print text.upper()
        for word in text.split():
            print word

########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="TextCtrl Demo")
        panel = MyPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()
.

ここではwx.EVT_KEY_DOWNにバインドし、押されたキーコードを抽出しています。その後、KeyCodeがEnterキーまたはTabキーのかどうかを確認します。そうであれば、それはテキストを処理してからevent.EventObject.Navigate()を呼び出します。これにより、wxpythonがタブ順で次のウィジェットにフォーカスを移動させます。

その主題について次のように読むことができます。

wxpythonのキーとCHARイベントの詳細については、次の項目を参照してください。

他のヒント

1.まったく動作するタブで、窓や個々のパネルがコントロール/ウィガイッツの範囲内の範囲として、そのスタイルのフラグの一部として次のようになります.WXTAB_TRAVERSAL IE;

class MyPanel(wx.Panel):
    def __init__(self, parent,id):
        wx.Panel.__init__(self, parent, id, wx.DefaultPosition,wx.DefaultSize,
                         wx.RAISED_BORDER|wx.TAB_TRAVERSAL)
.

2。タブ順序は、パネルまたはフレームにコントロールを追加する順序によって設定されます。

3)タブオーダーも順序ウィジェットに依存しているようです。これはウィジェットのID番号によるものです。シザー/パネルへの追加の順序は私を助けてくれなかった。

4)コントロールが設定された後に、ここで少しDemofor設定タブ注文があります。

order = (control1, control2, control3, ...)
for i in xrange(len(order) - 1):
   order[i+1].MoveAfterInTabOrder(order[i])
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top