代码之家  ›  专栏  ›  技术社区  ›  ρss user2100427

sendMessage()在wxPython中最多接受3个参数(4个给定)错误

  •  3
  • ρss user2100427  · 技术社区  · 10 年前

    我目前正在开发一个在windows 7操作系统上使用python v2.7和wxPython v3.0的GUI应用程序。 我正在使用 pubsub 用于向我的主GUI线程发送信息以更新我的GUI的模块。 我正在使用 wx.CallAfter() 将消息发送到主GUI循环。

    问题 :在我的程序中,有一个实例需要发送两个 lists 使用 wx.CallAfter() 如下所示:

    wx.CallAfter(pub.sendMessage, 'Update', ListA, ListB)
    

    我收到以下错误:

    sendMessage() takes at most 3 arguments (4 given)
    

    在不修改接收此消息的方法的情况下,是否可以解决此问题?

    wx.CallAfter(pub.sendMessage, 'Update', ListA) 具有魅力。

    感谢您抽出时间。

    答复 :我使用了以下导入

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

    我应该使用以下方法来解决我的问题:

    from wx.lib.pubsub import setupkwargs
    from wx.lib.pubsub import pub
    
    2 回复  |  直到 10 年前
        1
  •  3
  •   Oliver    10 年前

    您只能按关键字值发送消息,因此必须执行以下操作:

    from wx.lib.pubsub import pub 
    ...
    wx.CallAfter(pub.sendMessage, 'Update', arg1 = ListA, arg2 = ListB)
    

    arg1和arg2必须与侦听器参数相同(因此,给定主题(“Update”)的所有侦听器以及该主题的所有发件人必须使用相同的参数名称;但由于python的关键字参数,顺序无关紧要)。

    注意:以上假设您使用的是pubsub的最新版本,带有pubsub默认的消息传递协议,而不是v1或arg1。尝试打印pub.VERSION_STR或pubsub。 版本 (后者仅在最新版本wxpython phoenix中,不太可能是您正在使用的版本)。此外,如果存在 from wx.lib.pubsub import setupv1 from wx.lib.pubsub import setuparg1 然后使用旧的pubsub,它只接受一个消息数据,但不需要arg-name(这也可以解释您的问题)。

        2
  •  3
  •   GreenAsJade    10 年前

    使用命名参数。

    wx.CallAfter(pub.sendMessage, 'Update', list1 = ListA, list2 = ListB)

    这是有效的:

    import wx
    
    from wx.lib.pubsub import setupkwargs
    from wx.lib.pubsub import pub
    
    
    class Controller(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, "Test")
    
            pub.subscribe(self.OnAppEvent, "APP_EVENT")
            wx.CallAfter(pub.sendMessage, "APP_EVENT", list1=('1','a'), list2=('2','b'))
            self.Show()
    
        def OnAppEvent(self, list1, list2):
            print list1, list2
    
    
    
    app = wx.App()
    controller = Controller()
    
    app.MainLoop()