0
如果沒有爲EVT_SET_FOCUS
定義處理程序,是否可以檢查TextCtrl
是否處於鍵盤焦點(在文本框中閃爍光標)?如果鑰匙光標在方框中,防止計時器更新文本框
我只是想做一個快速的布爾檢查,以防止wx.Timer
覆蓋文本框,如果用戶在框中寫東西。
如果沒有爲EVT_SET_FOCUS
定義處理程序,是否可以檢查TextCtrl
是否處於鍵盤焦點(在文本框中閃爍光標)?如果鑰匙光標在方框中,防止計時器更新文本框
我只是想做一個快速的布爾檢查,以防止wx.Timer
覆蓋文本框,如果用戶在框中寫東西。
您可以通過查找哪個窗口具有焦點(使用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()
這工作得很好。謝謝! 而不是「如果不是f == self.text」,我使用「如果不在f [self.text,self.button_goto]」,以確保計時器不覆蓋文本框,當用戶點擊「轉到「按鈕。我還在我的onGoto方法中添加了一個「self.SetFocus()」調用,以便在單擊按鈕時從按鈕中移除焦點。 – JcMaco 2009-06-05 21:08:17
不客氣,我很高興它爲你工作。 – tom10 2009-06-08 04:19:54
後續問題:如果我在GUI中包含一個滑塊並使其表現爲拖動它時,其當前值顯示在文本框中(計時器已暫停)。一旦滑塊被釋放,定時器現在可以恢復在文本框中寫入文本。我可以用什麼事件來實現這個目標?我的滑塊綁定到EVT_SLIDER,並且似乎沒有辦法檢查此事件的鼠標狀態。 – JcMaco 2009-06-10 19:25:18