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