2009-06-04 51 views

回答

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() 
+0

這工作得很好。謝謝! 而不是「如果不是f == self.text」,我使用「如果不在f [self.text,self.button_goto]」,以確保計時器不覆蓋文本框,當用戶點擊「轉到「按鈕。我還在我的onGoto方法中添加了一個「self.SetFocus()」調用,以便在單擊按鈕時從按鈕中移除焦點。 – JcMaco 2009-06-05 21:08:17

+0

不客氣,我很高興它爲你工作。 – tom10 2009-06-08 04:19:54

+0

後續問題:如果我在GUI中包含一個滑塊並使其表現爲拖動它時,其當前值顯示在文本框中(計時器已暫停)。一旦滑塊被釋放,定時器現在可以恢復在文本框中寫入文本。我可以用什麼事件來實現這個目標?我的滑塊綁定到EVT_SLIDER,並且似乎沒有辦法檢查此事件的鼠標狀態。 – JcMaco 2009-06-10 19:25:18