Запретить таймеру обновлять текстовое поле, если курсор находится в поле - PullRequest
0 голосов
/ 05 июня 2009

Можно ли проверить, находится ли TextCtrl в фокусе клавиатуры (мигающий курсор в текстовом поле) без определения обработчика для EVT_SET_FOCUS?

Я просто хочу сделать быструю логическую проверку, чтобы wx.Timer не перезаписывал текстовое поле, если пользователь что-то пишет в поле.

1 Ответ

3 голосов
/ 05 июня 2009

Вы можете обойти обновление таймера, найдя, какое окно имеет фокус (используя 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()
...