首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt生成按钮-连接器

PyQt生成按钮-连接器
EN

Stack Overflow用户
提问于 2014-01-18 18:52:09
回答 2查看 160关注 0票数 0

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

代码语言:javascript
复制
    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]处绑定_j ( def _1(self): / def _2(self): / ...,但在执行时绑定:

代码语言:javascript
复制
connect() slot argument should be a callable or a signal, not 'str'

怎么修呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-18 19:00:10

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

像这样的东西可能会起作用

代码语言:javascript
复制
self.button[i].clicked.connect(getattr(self, '_'.format(j)))
票数 1
EN

Stack Overflow用户

发布于 2014-01-18 19:00:09

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

代码语言:javascript
复制
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 )

另外,也许您可以直接将插槽添加到self中,而不是构建一个dict:

代码语言:javascript
复制
setattr(self, 'on_button_%i_clicked' % i, slot) # perhaps more convenient?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21208436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档