如何编写wxPython textCtrl焦点事件

时间:2014-09-17 20:09:47

标签: 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.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中执行此操作?我使用它构建了我的应用程序,但无法添加焦点事件。似乎它提供的唯一焦点事件是整个窗口。

编辑9/19/14: 迈克,这是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'

该活动运作正常(因为在我想要时打印测试),但我无法突出显示文字而我无法看到我的光标。

1 个答案:

答案 0 :(得分:1)

您没有显示您的事件处理程序,但我的猜测是您需要在结尾处调用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: