PyQt - 带参数的插槽
示例:
我有三个按钮,所有的按钮几乎都一样。 我只想为所有 3 个按钮提供 1 个插槽功能。
def slotButtons(nr_button):
#common part
if(nr==1):
#for button 1
else if(nr==2):
#for button 2
else if(nr==3):
#for button 3
#common part
所以我需要像带有参数的插槽之类的东西。Python
QtCore.QObject.connect(pushButton1, QtCore.SIGNAL("clicked()"), slotButtons(1))
QtCore.QObject.connect(pushButton2, QtCore.SIGNAL("clicked()"), slotButtons(2))
QtCore.QObject.connect(pushButton3, QtCore.SIGNAL("clicked()"), slotButtons(3))
(pyQt) 可以做这样的事情吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
connect
需要的是任何可调用 Python 对象。由于 Python 将函数作为一等对象,因此可以使用包装函数轻松实现。对于简单的情况,lambda
可以:What
connect
needs is any callable Python object. Since Python has functions as first-class objects, this is easy to implement with a wrapper function. For simple cases, alambda
would do:您可以使用
QObject::sender()
函数对每个发送者、对象进行不同的行为,请参阅 QObject 文档了解详细信息。You can use
QObject::sender()
function to behave differently for each sender, object, see QObject documentation for details.我不使用PyQt,但看看QSignalMapper文档,它应该是相同的。基本上,它允许您将来自不同对象的信号映射到带有参数的插槽。
I don't use PyQt but take a look at QSignalMapper documentation, it should be the same. Basically, it allows you to map signals coming from different objects to a slot with a parameter.
您可以使用一个成员变量来标识该对象并执行类似以下的操作,我确定。
You could have a member variable to identify the object and do something like the following im sure.
您甚至可以这样做:
一旦您弄清楚它是如何工作的,它就是一个非常棒的工具。
编辑:
您还可以跳过所有 ifs/else...
直接开门见山... - 粗略的例子:
You can even do :
Its quite great tool once you figure out how it works.
Edit:
You can also skip doing all the ifs/else...
Just go straight to point... - rough example: