PyQt - 带参数的槽位

2 投票
5 回答
2174 浏览
提问于 2025-04-16 09:42

举个例子:

我有三个按钮,它们的功能几乎是一样的。
我想为这三个按钮只写一个函数来处理它们。

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 

所以我需要一种可以带参数的槽函数……

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))

Python(pyQt)能做到这一点吗?

5 个回答

0

我不使用PyQt,但可以看看QSignalMapper的文档,它应该是类似的。简单来说,它的作用是把来自不同对象的信号连接到一个可以接收参数的槽函数上。

1

你可以使用 QObject::sender() 这个函数来让程序对不同的发送者(对象)做出不同的反应。想了解更多细节,可以查看 QObject 的文档

5

这里提到的 connect 需要的是任何可以被调用的 Python 对象。因为在 Python 中,函数被视为一等公民,所以我们可以很简单地用一个包装函数来实现这个功能。对于简单的情况,使用 lambda 表达式就可以了:

    self.connect(pyuic4Button, SIGNAL("clicked()"),
            lambda: self.setPath("pyuic4"))
    self.connect(pyrcc4Button, SIGNAL("clicked()"),
            lambda: self.setPath("pyrcc4"))

撰写回答