我有一个字典,其键是我的PyQT界面中所有拨号的名称。与这些键关联的值是与每个拨号相关联的特定数值,需要传递给处理函数(以确定移动了哪个拨号),以及该拨号的新值。
我使用functools.partial为每个数值创建一个处理函数的不同实例,但是“valueChanged”信号返回一个整数,我不知道如何将它传递给部分函数好。以下似乎不起作用,因为dialChanged函数最终永远不会被调用:
for dial, cc, in dialDict.iteritems():
getattr(self.ui, dial).setRange(0,127)
getattr(self.ui, dial).valueChanged.connect(
lambda value: partial(self.windowHandler.dialChanged,
mainWindowInstance=self,
cc=cc,
value=value))
我认为问题与在for循环和范围内使用lambda函数有关,但我不知道如何将valueChanged信号的返回值传递给partial创建的插槽。任何建议将不胜感激。
答案 0 :(得分:2)
我实际上认为在这里使用partial是有意义的,并抛弃lambda,但是要让你的dialChanged
处理程序具有回调友好签名:
# where ever this is defined
def dialChanged(value, mainWindowInstance=None, cc=None):
pass
cbk = partial(
self.windowHandler.dialChanged,
mainWindowInstance=self,
cc=cc)
.valueChanged.connect(cbk)
将使用值arg调用插槽,因此这应该与我认为的签名对齐。只有在您无法控制dialChanged插槽功能并且需要通过绕过呼叫完全重新格式化签名时,才需要lambda。