我想自动生成按钮连接...但是不工作:
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): / ...
如何解决?
答案 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
。