我目前正在 Windows 7 操作系统上使用 python v2.7 和 wxPython v3.0 开发一个 GUI 应用程序。
我正在使用 pubsub
模块将信息发送到我的主 GUI 线程以更新我的 GUI。
我正在使用 wx.CallAfter()
将消息发送到主 GUI 循环。
问题:在我的程序中有一个实例,我需要使用 wx.CallAfter()
发送两个 list
,如下所示:
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
最佳答案
您只能通过关键字值发送消息,因此您必须这样做:
from wx.lib.pubsub import pub
...
wx.CallAfter(pub.sendMessage, 'Update', arg1 = ListA, arg2 = ListB)
arg1 和 arg2 必须与监听器参数相同(因此给定主题(“更新”)的所有监听器以及该主题的所有发送者必须使用相同的参数名称;但顺序无关紧要,谢谢到 python 的关键字参数)。
注意:以上假设您使用的是相当新的 pubsub 版本,使用 pubsub 的默认消息传递协议(protocol),而不是 v1 或 arg1。尝试打印 pub.VERSION_STR 或 pubsub.VERSION (后者是最新的,wxpython phoenix,不太可能是你正在使用的那个)。此外,如果有 from wx.lib.pubsub import setupv1
或 from wx.lib.pubsub import setuparg1
那么您使用的是旧的 pubsub,它只接受一条消息数据,但不需要 arg 名称(这也可以解释您的问题)。
关于python - wxPython 中的 sendMessage() takes at most 3 arguments (4 given) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296646/