PyQt生成Button-Connectors

时间:2014-01-18 18:52:10

标签: python button pyqt connect

我想自动生成按钮连接...但是不工作:

    self._ = {}
    j = 0
    for i in self.btn:
        self._[i] = 'self._' + repr(j)
        print self._[i]
        self.button[i].clicked.connect(self._[i])
        j += 1

应该绑定函数button[i]的{​​{1}},但是执行:

_j ( def _1(self): / def _2(self): / ...

如何解决?

2 个答案:

答案 0 :(得分:1)

错误消息说明了一切,您需要传递函数或信号。尝试使用getattr来获取字符串所代表的函数。

这样的事可能有效

self.button[i].clicked.connect(getattr(self, '_'.format(j)))

答案 1 :(得分:0)

尝试创建实际的可调用方法,而不是将字符串发送到connect()

def make_slot(self, i):
    print 'clicked %i' % i 

self._ = {}
for i in self.btn:
    slot = self.make_slot(i)
    self._[i] = slot
    self.button[i].clicked.connect(slot)

(make_slot函数用于防止python后期绑定的怪癖,请参阅Creating functions in a loop

此外,您可以直接将插槽添加到自己:

,而不是构建一个字典
setattr(self, 'on_button_%i_clicked' % i, slot) # perhaps more convenient?

这样,如果您需要,可以单独将它们称为self.on_button_42_clicked