如何编写wxpythontextctrl焦点事件
我试图在用户单击textCtrl时触发一行代码。最终目标是在单击框时突出显示框中的内容。我知道这在wx.EVT_SET_FOCUS中是可能的,但这要么是错误的,要么是我实现错了。这是我的密码:如何编写wxpythontextctrl焦点事件,python,wxpython,wxtextctrl,wx.textctrl,wxformbuilder,Python,Wxpython,Wxtextctrl,Wx.textctrl,Wxformbuilder,我试图在用户单击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 = 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日编辑:
迈克,这是我在gui.py
中自动生成的wxFormBuilder代码:
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'
事件工作正常(如我需要时在测试中打印),但我无法突出显示文本,也看不到光标。您没有显示事件处理程序,但我猜您需要在事件结束时调用
event.Skip()
。我还想指出,您未正确绑定事件。应该是:
self.m_textCtrl1.Bind(wx.EVT_SET_FOCUS, self.highlightText)
或
有关完整的解释,请参见wxPython wiki:
event.Skip()
时才会发生这种情况。否则它会选择所有内容,但我无法编辑文本。您的上一个示例在事件处理程序中没有event.Skip()
,因此您不能突出显示文本等。您是对的,先生。我假设,因为它在虚拟处理程序中已经足够好了,但现在我想起来,get无论如何都被覆盖了。是否建议所有事件处理程序都使用此选项?没有它,我的所有其他事件都可以正常工作。如果事件需要在事件链上传播,则只需要event.Skip()。在这种情况下,您希望事件继续,以便可以正常使用小部件。大多数情况下,您不需要调用Skip(),因为您定义的事件处理程序执行您希望它执行的所有操作。
self.Bind(wx.EVT_SET_FOCUS, self.highlightText, self.m_textCtrl1)