在 PyQt 中创建动态按钮
Posted
技术标签:
【中文标题】在 PyQt 中创建动态按钮【英文标题】:Create dynamic button in PyQt 【发布时间】:2012-05-24 01:49:30 【问题描述】:我尝试在 PyQt 类中添加一个函数,但它总是返回一个错误。
# Error: TypeError: connect() slot argument should be a callable or a signal, not 'NoneType' #
def commander (self, arg):
exec arg
def aButton (self, layout, **kwargs):
name = kwargs.pop("name","Button")
command = kwargs.pop("command", "" )
button = QtGui.QPushButton(name)
button.clicked.connect(self.commander(command))
layout.addWidget(button)
return button
可能有人可以帮我解决这个问题:') 谢谢!
【问题讨论】:
【参考方案1】:你需要一个函数:
button.clicked.connect(lambda: self.commander(command))
注意 lambda 会避免函数调用的评估,所以它只会在点击时调用self.commander(command)
【讨论】:
你能详细解释一下吗?我的意思是解决方案有效,但我不明白为什么...... @SKYnine 如果你跳过lambda
,那段特定的代码self.commnader(command)
将在该表达式期间被评估,并且永远不会再被评估。结果(无论是什么)都将传递给connect
方法。使用lambda
,您将告诉解释器这是一段稍后要执行的代码(因此它将是一个只有一条语句的函数)。然后将该函数传递给connect
方法。【参考方案2】:
出现在
button.clicked.connect(self.commander(command))
self.commander(command)
正在返回 None
而不是信号或可调用对象。
【讨论】:
是的,但我只想在单击按钮时执行一些代码。我不明白我需要返回什么样的价值。 return compile(arg, '', 'exec') 我试试,但它是一样的...以上是关于在 PyQt 中创建动态按钮的主要内容,如果未能解决你的问题,请参考以下文章