2013-05-29 19 views
0

該代碼僅用於寫一個簡單的UI(僅存在一個文本框在窗口上),以及事件wx.EVT_KEY_DOWN結合到功能OnKeyDown,但是當我按下Esc鍵,窗口會彈出EscTest,那麼另一個Esc,Test,最後它會在四個消息框後退出,爲什麼?我只定義了兩個消息框int wx.WXK_ESCAPE綁定。wxpython:爲什麼我輸入綁定函數兩次?

# -*- coding: utf-8 -*- 

import wx 

class Command(wx.Frame): 

    def __init__(self, parent, title): 
     super(Command, self).__init__(parent, title=title, 
      size=(600, 500)) 

     self.InitUI() 
     self.Centre() 
     self.Show()  

    def InitUI(self): 

     pnl = wx.Panel(self) 
     self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown) 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 

     self.__tc_command = wx.TextCtrl(pnl, style=wx.TE_MULTILINE) 

     self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown) 

     hbox.Add(self.__tc_command, proportion=1, flag=wx.ALL|wx.EXPAND, border=15) 
     pnl.SetSizer(hbox) 

    def OnKeyDown(self, evt): 
     """Enter to send data, Esc to exit.""" 
     key = evt.GetKeyCode() 
     if key == wx.WXK_ESCAPE: 

      ##################Only two MessageBox, but pop up four################## 
      wx.MessageBox("Esc") 
      wx.MessageBox("Test") 
      ##################Only two MessageBox, but pop up four################## 

      self.Close() 
     if key == wx.WXK_RETURN: 
      wx.MessageBox("Enter") 
     evt.Skip() 

if __name__ == '__main__': 

    app = wx.App(redirect=False) 
    Command(None, title='Command') 
    app.MainLoop() 
+0

爲什麼你將'EVT_CHAR_HOOK'綁定到'OnKeyDown'兩次?在'self.InitUI'中,你有兩個相同的綁定。 –

回答

1

您在代碼中調用self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown)兩次。

+0

哦,對不起,就是這樣。 – Searene

相關問題