在PyQT中动态创建一组按钮时,我遇到了一些问题。在
我使用一个列表来创建对应于不同值的按钮。因为每个按钮都是不同的,我需要让他们向“button Clicked”函数传递一个参数,分别标识自己,这样我就可以用它们执行不同的操作。以下是我目前所掌握的情况:
for x in self.buttons:
name = str(x)
button = QtGui.QPushButton(Frame)
button.setText(name)
cp_result = self.changeProject(name)
if cp_result is None:
print 'changeProject(%s) is None!', name
else:
print 'changeProject(%s) is OK (%r)', name, cp_result
#button.clicked.connect(cp_result)
setattr(self, "btn_%s" % name, button)
self.btnList.append(button)
def changeProject(self, name):
for x in self.btnList:
if x.isDown:
#Change UI Frame to blahblah
return 'A String'
与Alex一起工作,这是最新的代码,测试changeProject的返回值,显然不能是字符串,但我仍然需要确定在自动生成的按钮之间按下了哪个按钮。在
当前错误:TypeError: connect() slot argument should be a callable or a signal, not 'str'
可以使用
setattr
向对象动态添加属性我觉得你运行'exec'太多了,我觉得你的问题是你试图连接到QPushButton的.clicked(),这实际上是一个信号。你真的需要把论点传给这里吗
exec 'self.btn_%s.clicked.connect(self.changeProject("%s"))' % (x, x)
因为如果你不这样做,你可以这样连接:
self.connect(self.btn_%s, SIGNAL('clicked()'), self.changeProject)
如果您需要知道单击了哪个按钮,可以在列表中迭代以找到单击的按钮:
for x in buttons:
if x.isDown(): (function)
也可以使用pyqtSignal。在
错误消息告诉您的是,}。大概你是想让那个方法返回一些不同的东西?在
self.changeProject("%s")
对于您要替换的其中一个值,%s
返回{当然,如果没有看到它的代码,就不可能进一步帮助您完成调试
changeProject
的任务。但是,例如,你可以把电话分成如下几部分(一旦你按照lazy1的建议摆脱了大量的执行官):这样,您就不会徒劳地尝试“connect to None”,而是会在错误日志中看到导致该错误的所有名称的返回值,然后可以根据该信息继续调试。然而,更有可能的是,通过查看
changeProject
的源代码,您的bug实际上可能变得明显。在编辑:当然,}!-)--相应地修复了代码段。在
connect
的参数来自changeProject
(而不是来自另一个{相关问题 更多 >
编程相关推荐