wxpython之pubsub 发布-订阅者模式

wxPython Pubsub 包提供的发布-订阅模式,允许您的应用程序的不同部分之间发送数据。在许多情况下,使用发布-订阅者模式,将大大简化其设计复杂度和提高可测试性。罗宾 · 邓恩,创建者的 wxPython,优雅的对Pubsub描述:

  基本上你的程序的一些部件订阅特定的主题,然后其它部件发布该主题的消息。

图解:

 

Publisher基本用法:

pub.subscribe(listener, topic):listener订阅者,这边一般是函数。topic,uniqu的主题。

sendMessage(topic, data, onTopicNeverCreated):topic,uniqu的主题,data 要传给订阅者的数据。onTopicNeverCreated如果没有这个主题被订阅,应该有onTopicNeverCreated处理

例子:

#-*- coding: UTF-8 -*-
#-------------------------------------------------------------------------------
# Name:        
# Purpose:     
#
# Author:      ankier
#
# Created:     12-01-2013
# Copyright:   (c) ankier 2013
# Licence:     <your licence>
#-------------------------------------------------------------------------------

from wx.lib.pubsub import Publisher as pub

class Student():
    def __init__(self):
        self.__Name = None        
        #注册订阅事件
        pub.subscribe(self.__UpdateName,  'nameEvntTopic')
    
    def SetName(self, name):
        self.__Name = name
     
    #订阅事件    
    def __UpdateName(self, eventTopicData):
        if self.__Name == 'NameA':
            print 'You can not give me a new name as my name is ',self.__Name
            return
        else:
            print 'I change name to ', eventTopicData.data
        self.__Name = eventTopicData.data    

stuA = Student()
stuA.SetName('NameA')
stuB = Student()
stuB.SetName('NameB')

#发布消息
pub.sendMessage('nameEvntTopic', ['NewName', 'Age'])

#事件没有被注册时候,统一转到该函数处理
def onTopicNeverCreated(eventTopicData):
    print eventTopicData

#发布一个不存在的事件
pub.sendMessage('NoneEvntTopic', ['NewName', 'Age'], onTopicNeverCreated)

运行结果:

You can not give me a new name as my name is  NameA
I change name to  ['NewName', 'Age']
('NoneEvntTopic',)

 

转载于:https://www.cnblogs.com/ankier/archive/2013/01/12/2857648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值