Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxpython:为什么要输入绑定函数两次?_Python_Events_Wxpython - Fatal编程技术网

wxpython:为什么要输入绑定函数两次?

wxpython:为什么要输入绑定函数两次?,python,events,wxpython,Python,Events,Wxpython,代码仅用于编写一个简单的UI(窗口上只有一个文本框),并将事件wx.EVT_KEY_DOWN绑定到函数OnKeyDown,但当我按下Esc键时,窗口将弹出Esc,Test,然后是另一个Esc,Test,最后它会在四个消息框后退出,为什么?我只在wx.WXK\u ESCAPE绑定中定义了两个消息框 # -*- coding: utf-8 -*- import wx class Command(wx.Frame): def __init__(self, parent, title):

代码仅用于编写一个简单的UI(窗口上只有一个文本框),并将事件
wx.EVT_KEY_DOWN
绑定到函数
OnKeyDown
,但当我按下
Esc
键时,窗口将弹出
Esc
Test
,然后是另一个
Esc
Test
,最后它会在四个消息框后退出,为什么?我只在
wx.WXK\u ESCAPE
绑定中定义了两个消息框

# -*- 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()

您在代码中调用了两次self.Bind(wx.EVT\u CHAR\u HOOK,self.OnKeyDown)为什么要将
EVT\u CHAR\u HOOK
绑定到
OnKeyDown
两次?在
self.InitUI
中,您有两个相同的绑定。