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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM