如果键光标在框中,则防止计时器更新文本框

时间:2009-06-04 21:59:07

标签: user-interface events wxpython

是否可以检查TextCtrl是否在键盘焦点下(文本框中的光标闪烁)而未定义EVT_SET_FOCUS的处理程序?

我只是想做一个快速的布尔检查,以防止wx.Timer覆盖文本框,如果用户在框中写东西。

1 个答案:

答案 0 :(得分:3)

您可以通过查找哪个窗口具有焦点(使用FindFocus)并将其与TextCtrl窗口进行比较来绕过计时器更新。然后,如果您的TextCtrl具有焦点,您可以不管它。这是一个例子:

import wx

class TestFrame(wx.Frame):

    def __init__(self):
        self.count = 0
        wx.Frame.__init__(self, None, -1, "test frame", size=(200, 100))
        self.panel = wx.Panel(self, -1)
        button = wx.Button(self.panel, -1, "b", pos=(10, 40))
        self.text = wx.TextCtrl(self.panel, -1, `self.count`, size=(50, 25))
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.incr_text)
        self.timer.Start(1000)

    def incr_text(self, event):
        self.count += 1
        f = self.FindFocus()
        if not f==self.text:
            self.text.SetValue(`self.count`)

if __name__=="__main__":
    app = wx.PySimpleApp()
    TestFrame().Show()
    app.MainLoop()