2013-11-20 59 views
1

我想每次更改TextCtrl時都得到TextCtrl的值。我的代碼返回「舊」值(就像之前我按下了鍵) - 但我想用我按下的鍵獲得「新」值。 例如,當我的TC的價值是「123」,我加了一個「4」,我仍然得到「123」返回,但我想得到「1234」。wxpython事件處理:按下按鍵後的GetValue

class pageThree(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent,size=(800,600)) 
     self.pageThree=wx.Panel(self,size=(800,600))  
     self.TC = wx.TextCtrl(self.pageThree,-1,pos=(100,150),size=(60,20)) 
     self.TC.Bind(wx.EVT_KEY_DOWN, self.getValue) 

    def getValue(self, event): 
     print self.TC.GetValue() 

正如我只與本TC整數工作,我試圖添加+ event.GetKeyCode() - 48,但是當我刪除而不是增加一個=/

的值這不起作用

回答

2

您需要綁定到wx.EVT_TEXT而不是wx.EVT_KEY_DOWN。請看下面的例子:

import wx 

######################################################################## 
class MyPanel(wx.Panel): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, parent): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     self.text = wx.TextCtrl(self) 
     self.text.Bind(wx.EVT_TEXT, self.onText) 

    #---------------------------------------------------------------------- 
    def onText(self, event): 
     """ 
     """ 
     print self.text.GetValue() 


######################################################################## 
class MainFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Events!") 
     panel = MyPanel(self) 
     self.Show() 

#---------------------------------------------------------------------- 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainFrame() 
    app.MainLoop()