0

このコードは、単純な UI (ウィンドウにはテキスト ボックスのみ) を記述し、イベントwx.EVT_KEY_DOWNを関数OnKeyDownにバインドするためだけに使用されますが、Escキーを押すと、ウィンドウがポップアップしEscTest次に別EscのウィンドウがポップアップしTest、最後にそれが表示されます。 4 つのメッセージ ボックスの後に終了するのはなぜですか? wx.WXK_ESCAPEバインディングで 2 つのメッセージ ボックスのみを定義します。

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

1 に答える 1

1

self.Bind(wx.EVT_CHAR_HOOK, self.OnKeyDown)コードで 2 回呼び出しています。

于 2013-05-29T08:35:44.170 に答える