如何编写wxPython textCtrl焦点事件



当用户单击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日:Mike,这是我在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)

self.Bind(wx.EVT_SET_FOCUS, self.highlightText, self.m_textCtrl1)

有关完整的解释,请参阅wxPython wiki:

  • http://wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind

相关内容

  • 没有找到相关文章

最新更新