emit()如何知道在PyQT中使用哪个SLOT?

时间:2012-04-14 02:25:47

标签: python pyqt pyqt4

在main.py中

def setNumberFormat2(self):
    dialog = numberformatdlg2.NumberFormatDlg(self.format, self)
    self.connect(dialog, SIGNAL("changed"), self.refreshTable)
    dialog.show()

form.py

class NumberFormatDlg(QDialog):
  def __init__(self, format, parent=None):
       .....
     self.connect(buttonBox.button(QDialogButtonBox.Apply),
                                  SIGNAL("clicked()"), self.apply)
     self.connect(buttonBox, SIGNAL("rejected()"),
                                  self, SLOT("reject()"))
     self.setWindowTitle("Set Number Format (Modeless)")


  def apply(self):
     ....
     self.emit(SIGNAL("changed"))

据作者说:

  

最后,我们发出一个改变的信号,正如我们所看到的,这会导致   调用者调用的refreshTable()方法,后者依次格式化   使用调用者的格式字典表中的所有数字。

当我们发出时,我们怎么知道我们想申请哪个SLOT?基本上,如果我们有

self.connect(dialog, SIGNAL("changed"), self.refreshTable)
self.connect(dialog, SIGNAL("changed"), self.anotherMethod)

self.emit(...)如何知道我们正在应用哪个广告位?或者我错过了一些信息?

感谢。

1 个答案:

答案 0 :(得分:3)

self.emit没有“知道”任何东西 - 它只是发出信号。 self.connect()方法捕获信号并使用信号参数运行给定函数。

如果你将两个函数连接到一个信号,我认为两者都会运行。 你可能不应该这样做,因为它会使你的代码有点难以理解。

  • 如果要运行两个函数,请创建一个被调用的函数 changed_signal将调用其他函数。
  • 如果您想为不同的用途运行不同的功能,只需触发不同的信号。