2

ユーザーが textCtrl をクリックしたときにコード行を起動しようとしています。最終的な目標は、クリックされたときにボックスの内容を強調表示することです。これが wx.EVT_SET_FOCUS で可能であることは認識していますが、バグがあるか、実装が間違っています。これが私のコードです:

self.m_textCtrl1 = wx.TextCtrl(self.m_panel2, wx.ID_ANY, wx.EmptyString, 
                               wx.DefaultPosition, wx.Size(100,-1), wx.TE_LEFT)
self.m_textCtrl1.SetMaxLength(8) 
self.m_textCtrl1.SetMinSize(wx.Size(100,-1))
self.m_textCtrl1.SetMaxSize(wx.Size(100,-1))
self.m_textCtrl1.Bind(wx.EVT_SET_FOCUS, self.highlightText, self.m_textCtrl1)

このコードは、必要に応じて highlightText を正常に起動できますが、何らかの理由でカーソルが textCtrl から削除され、ユーザーはスポット、ハイライト、またはバックスペースを選択できなくなります。任意の提案をいただければ幸いです。ちなみに、wxFormBuilder でこれを行う方法はありますか? それを使用してアプリケーションを構築しましたが、フォーカス イベントを追加できませんでした。それが提供するフォーカスイベントは、ウィンドウ全体に対するものだけのようです。

2014 年 9 月 19 日編集: マイク、自動生成された wxFormBuilder コードは次のとおりですgui.py

class OrderNumEntry ( wx.Frame ):
    def __init__( self, parent ):
        # there's a lot more stuff here, but it's irrelevant
        self.m_textCtrl1.Bind( wx.EVT_SET_FOCUS, self.highlightText )

    def __del__( self ):
        pass

    # Virtual event handlers, overide them in your derived class
    def highlightText( self, event ):
        event.Skip()

...そして、これが私が書いたイベントハンドラーです

import wx, gui

class OrderFrame(gui.OrderNumEntry):
    def __init__(self, parent):
        gui.OrderNumEntry.__init__(self, parent)
        # again, a lot more irrelevant stuff here

    def highlightText(self, event):
        print 'test'

イベントは正常に動作します (必要なときにテストが出力されるように) が、テキストを強調表示できず、カーソルが表示されません。

4

1 に答える 1