#coding: utf-8


"""
ZetCode wxPython tutorial

This example demonstrates event propagation.

author: Jan Bodnar
website: www.zetcode.com
last modified: April 2018
"""

#Basic Events、Command Eventsの二種類にイヴェントがあり
#Cmmnad Eventsは子(ボタン)から親(パネル)および祖父母(フレーム)
#と伝播することができる。Basic Eventsは親がないイヴェントである。

#例
#ボタンが押されたら、パネルの背景色が変わる

import wx

class MyPanel(wx.Panel):

    def __init__(self, *args, **kw):
        super(MyPanel, self).__init__(*args, **kw)

        self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
        #Panelのインスタンスに付したボタンのためのイヴェント

    def OnButtonClicked(self, e):
        self.SetBackgroundColour("Red")
        self.Refresh()
        print('event reached panel class')
        #e.Skip()


class MyButton(wx.Button):

    def __init__(self, *args, **kw):
        super(MyButton, self).__init__(*args, **kw)

        self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
        #MyButtonに付したボタンのためのイヴェント
        #ボタンを押すことでイヴェント処理がはじまる

    def OnButtonClicked(self, e):

        print('event reached button class')
        e.Skip()


class Example(wx.Frame):

    def __init__(self, *args, **kw):
        super(Example, self).__init__(*args, **kw)

        self.InitUI()


    def InitUI(self):

        mpnl = MyPanel(self)
        #MyPanelのインスタンス

        MyButton(mpnl, label='Ok', pos=(15, 15))
        #MyButtonのインスタンス

        self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
        #Frameのインスタンスに付したボタンのためのイヴェント

        self.SetTitle('Propagate event')
        self.Centre()

    def OnButtonClicked(self, e):

        print('event reached frame class')
        #e.Skip()


def main():

    app = wx.App()
    ex = Example(None)
    ex.Show()
    app.MainLoop()


if __name__ == '__main__':
    main()

	実行例