python pubsub订阅多个主题

用户名

这看似有点笼统,但实际上问题很简单。是否可以使用pubsub模块订阅主题的子集。

让我简要解释一下我想完成的工作。在wxpython项目中,我想根据不同事件更改状态栏中的文本。因此,我想拥有一个可以订阅一组主题的函数(一个侦听器)。在侦听器中,我将拥有if语句和几个elif语句,可以在其中检查主题名称。然后状态栏文本将相应更改。

是否可以这样做,或者首先是个坏主意。我应该如何处理这种情况。提前致谢

迈克·德里斯科尔

有两种方法。首先,也许是最简单的,您可能只有一个听众。当发布给侦听器时,您只需传递不同的信息即可。例如,从A类,您将传递一个字符串。对于类B,您可以传递不同的字符串,但要传递给同一侦听器。然后,在侦听器中,只需检查您提到的字符串即可。

另一种方法是创建全部绑定到同一函数或方法的多个侦听器。然后,您可以发布给不同的侦听器,他们都将调用同一件事。

您应该使用最容易理解和调试的方法。

这是一个例子:

import wx
from wx.lib.pubsub import pub 

########################################################################
class OtherFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, wx.ID_ANY, "Secondary Frame")
        panel = wx.Panel(self)

        msg = "Enter a Message to send to the main frame"
        instructions = wx.StaticText(panel, label=msg)
        self.msgTxt = wx.TextCtrl(panel, value="")

        sendBtn = wx.Button(panel, label="Send Msg")
        sendBtn.Bind(wx.EVT_BUTTON, self.onSendMsg)

        closeBtn = wx.Button(panel, label="Send and Close")
        closeBtn.Bind(wx.EVT_BUTTON, self.onSendAndClose)

        sizer = wx.BoxSizer(wx.VERTICAL)
        flags = wx.ALL|wx.CENTER
        sizer.Add(instructions, 0, flags, 5)
        sizer.Add(self.msgTxt, 0, flags, 5)
        sizer.Add(sendBtn, 0, flags, 5)
        sizer.Add(closeBtn, 0, flags, 5)
        panel.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onSendMsg(self, event):
        """"""
        msg = "Another message!"
        pub.sendMessage("anotherListener", 
                        message=msg,
                        listener="anotherListener")

    #----------------------------------------------------------------------
    def onSendAndClose(self, event):
        """
        Send a message and close frame
        """
        msg = self.msgTxt.GetValue()
        pub.sendMessage("panelListener", 
                        message=msg,
                        listener="panelListener")
        self.Close()

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        pub.subscribe(self.myListener, "panelListener")
        pub.subscribe(self.myListener, "anotherListener")

        btn = wx.Button(self, label="Open Frame")
        btn.Bind(wx.EVT_BUTTON, self.onOpenFrame)

    #----------------------------------------------------------------------
    def myListener(self, message, listener=None):
        """
        Listener function
        """

        if listener == "panelListener":
            print "panel listener has sent the following: ",
            print message
        elif listener == "anotherListener":
            print "another listener sent the following: ", 
            print message

    #----------------------------------------------------------------------
    def onOpenFrame(self, event):
        """
        Opens secondary frame
        """
        frame = OtherFrame()
        frame.Show()

########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="New PubSub API Tutorial")
        panel = MyPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

这是我的教程中经过修改的示例:http : //www.blog.pythonlibrary.org/2013/09/05/wxpython-2-9-and-the-newer-pubsub-api-a-simple-tutorial/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python pubsub订阅多个主题

来自分类Dev

python pubsub订阅到期

来自分类Dev

订阅并阅读主题:ActiveMQ和Python

来自分类Dev

Dojo的发布/订阅-如何订阅多个主题

来自分类Dev

SI 订阅多个 mqtt 主题

来自分类Dev

RxJS订阅较少的多个主题与订阅较多的单个主题

来自分类Dev

可以订阅的PubSub主题数量是否有限制?

来自分类Dev

订阅 PubSub 主题的速率限制/节流谷歌云功能

来自分类Dev

在crossbar高速公路上订阅python中的主题

来自分类Dev

Python - MQTT 多订阅:消息来自哪个主题

来自分类Dev

如果我多次订阅同一个主题会怎样?(Python,谷歌发布订阅)

来自分类Dev

Spring集成MQTT发布并订阅多个主题

来自分类Dev

Spring集成MQTT发布并订阅多个主题

来自分类Dev

Mqtt订阅了Contiki中的多个主题

来自分类Dev

Azure功能:是否可以订阅多个主题?

来自分类Dev

Scala 如何订阅多个 kafka 主题

来自分类Dev

如何仅使用主题名称(而不是订阅名称)订阅Google Cloud pubsub?

来自分类Dev

Python 中的数据流未显示来自 Pubsub 订阅的输出集合

来自分类Dev

接收重复消息的 Google PubSub Python 多订阅者客户端

来自分类Dev

订阅的主题

来自分类Dev

部署后使用requirements_file参数后,python数据流作业不接受来自pubsub订阅的消息

来自分类Dev

Mule ESB和MQTT连接器:订阅多个主题

来自分类Dev

多个MQTT客户端订阅了相同的主题

来自分类Dev

订阅多个主题,使用通配符还是创建实例?

来自分类Dev

一个主题有多个订阅者。有订阅时打开,否则关闭

来自分类Dev

如何在Java上使用PAHO订阅多个主题和多个MqttCallback

来自分类Dev

在多个方法调用上对同一主题/可观察对象的多个订阅

来自分类Dev

MQTT主题订阅

来自分类Dev

订阅错误的主题

Related 相关文章

  1. 1

    python pubsub订阅多个主题

  2. 2

    python pubsub订阅到期

  3. 3

    订阅并阅读主题:ActiveMQ和Python

  4. 4

    Dojo的发布/订阅-如何订阅多个主题

  5. 5

    SI 订阅多个 mqtt 主题

  6. 6

    RxJS订阅较少的多个主题与订阅较多的单个主题

  7. 7

    可以订阅的PubSub主题数量是否有限制?

  8. 8

    订阅 PubSub 主题的速率限制/节流谷歌云功能

  9. 9

    在crossbar高速公路上订阅python中的主题

  10. 10

    Python - MQTT 多订阅:消息来自哪个主题

  11. 11

    如果我多次订阅同一个主题会怎样?(Python,谷歌发布订阅)

  12. 12

    Spring集成MQTT发布并订阅多个主题

  13. 13

    Spring集成MQTT发布并订阅多个主题

  14. 14

    Mqtt订阅了Contiki中的多个主题

  15. 15

    Azure功能:是否可以订阅多个主题?

  16. 16

    Scala 如何订阅多个 kafka 主题

  17. 17

    如何仅使用主题名称(而不是订阅名称)订阅Google Cloud pubsub?

  18. 18

    Python 中的数据流未显示来自 Pubsub 订阅的输出集合

  19. 19

    接收重复消息的 Google PubSub Python 多订阅者客户端

  20. 20

    订阅的主题

  21. 21

    部署后使用requirements_file参数后,python数据流作业不接受来自pubsub订阅的消息

  22. 22

    Mule ESB和MQTT连接器:订阅多个主题

  23. 23

    多个MQTT客户端订阅了相同的主题

  24. 24

    订阅多个主题,使用通配符还是创建实例?

  25. 25

    一个主题有多个订阅者。有订阅时打开,否则关闭

  26. 26

    如何在Java上使用PAHO订阅多个主题和多个MqttCallback

  27. 27

    在多个方法调用上对同一主题/可观察对象的多个订阅

  28. 28

    MQTT主题订阅

  29. 29

    订阅错误的主题

热门标签

归档