• wxpython笔记:wx.lib.pubsub与PyPubSub发布订阅


    wx.lib.pubsub

      wx.lib.pubsub模块提供了一个发布-订阅代理,让您的应用程序的部分给定主题的应用程序的其他部分的广播消息。侦听器可以是应用程序中的任何可调用对象,即函数,绑定方法,具有call的任何对象等。请注意,pubsub本身并不通过网络进行代理,而只能在应用程序内工作。

    资料:https://wiki.wxpython.org/WxLibPubSub

    历史

    在wxPython 2.8.11(2010年春季)之前,wx.lib.pubsub是一个模块,称为“原始” pubsub或“ pubsub版本1”。在2007 年前后,Pubsub获得了独立于wxPython的自己的住所,成为PyPubSub。对其进行了重写,以提供更通用的API,该API更好地支持自定义异常处理程序,通知,主题树规范,以及通过命名参数的更具表现力的消息数据签名。新的API,称为“版本3”,与版本1 向后兼容。但是wx.lib.pubsub保留了最初的pubsub实现已有几年了。

    从wxPython 2.8.11开始,wx.lib.pubsub集成了新的PyPubSub。在wxPython 2.8.11中,将wx.lib.pubsub配置为公开PyPubSub的“版本1” API,而不是更新的,功能更强大的版本3 API。如果准备好了,这将使pubsub用户有机会将其基于wxPython的应用程序升级到pubsub版本3。要在wxPython> = 2.8.11.0中使用新的版本3 API,应用程序必须通过配置模块专门请求它,稍后将进行讨论。

    PubSub的发展现在托管在http://sourceforge.net/projects/pubsub|SourceForge ]作为PyPubSub(尽管原因太多时间去解释SourceForge的项目名称是“发布-订阅”,而不是“pypubsub”),是独立的,即它不需要使用wxPython。因此,仍然使用低于2.8.11.0的wxPython版本但希望使用新的pubsub版本3 API的开发人员可以从SF.net下载PyPubSub并将其作为独立的Python软件包安装。

    使用wx.lib.pubsub简单的例子

     #订阅主题,接收这个主题的信息
    #pub.subscribe(callable, topic)
    
      #发布主题,并向这个主题发送信息
     #pub.sendMessage(topic,参数名=参数值...)
    import wx
    from wx.lib.pubsub import pub
    
    
    class MyFrame(wx.Frame):
        def __init__(self,parent=None):
            super(MyFrame, self).__init__(parent,-1,"文本框",size=(300,150))
            panel = wx.Panel(self,-1)
            self.button = wx.Button(panel,-1,"确定",pos=(10,10))
            self.Bind(wx.EVT_BUTTON,self.OnClick,self.button)
            self.button.SetDefault()  #将按钮设置为默认按钮,不然会是选中状态,边框不同
            self.inputText = wx.TextCtrl(panel,-1,"",pos=(100,10),size=(150,-1),style=wx.TE_READONLY)
            #订阅主题,接收这个主题的信息
            #pub.subscribe(callable, topic)
            pub.subscribe(self.recive, 'object.added')
    
        def OnClick(self,event):
            #发布主题,向这个主题发送信息
            pub.sendMessage('object.added', data=42, extra1='hello!')
            pub.sendMessage('object.added', data=23, extra1='hello!', extra2=[2, 3, 5, 7, 11, 13, 17, 19, 23])
    
        def recive(self,data, extra1, extra2=None):
            print(data)
            print(extra1)
            if extra2:
                print(extra2)
            self.inputText.Value = str(data)
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()

    如何过渡到PyPubSub

    安装

    pip install pypubsub

    替换包

    from wx.lib.pubsub import pub 
    from pubsub import pub

    发布订阅怎么做

    pub.subscribe(self.myListener, "panelListener")
    
    pub.sendMessage("panelListener", message=msg)
  • 相关阅读:
    storm中DAU实时计算方案
    冒泡排序
    跨域
    关于java面试题
    vue+npm+Element插件+路由
    Android云端APP
    js图片预览带进度条
    jQuery上传文件显示进度条
    SSM+form表单文件上传
    SSM批量添加数据
  • 原文地址:https://www.cnblogs.com/-wenli/p/12372911.html
Copyright © 2020-2023  润新知