1

我有一本字典,它的键是我的 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 创建的插槽中。任何建议,将不胜感激。

4

1 回答 1

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。

于 2012-04-04T00:56:32.133 回答