代码之家  ›  专栏  ›  技术社区  ›  DragneelFPS

如何专门连接到过载信号?

  •  0
  • DragneelFPS  · 技术社区  · 8 年前

    我正在使用带有2个过载的信号

    buttonClicked = pyqtSignal([int],[str])
    

    class Example(QWidget):
    
        buttonClicked = pyqtSignal([int],[str])
    
        def __init__(self):
            super().__init__()
            self.init_ui()
    
        def init_ui(self):
            self.btn = QPushButton('Button',self)
            self.btn.clicked.connect(self.doAction)
            self.make_conn()
            self.setWindowTitle('Yo')
            self.show()
    
        def make_conn(self):
            self.buttonClicked.connect(self.showDialog) #How to make specific connection here . Using self.buttonClicked[int].connect(self.showDialog) doesnt work.
    
        def showDialog(self):
            print('here')
    
        def doAction(self):
            self.buttonClicked.emit('soru') #should NOT call showDialog
            self.buttonClicked.emit(23) #should call showDialog
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   eyllanesc Yonghwan Shin    8 年前

    好的,我在网上搜索了一下,不知怎么找到了一个解决方案和一些有趣的事情。

    emit() 我必须通过指定类型来指定重载。

    例如,在我上面的例子中,如果我想发出 str 我必须打电话 self.buttonClicked[str].emit('soru') 其次,我必须通过告诉它是否 str公司 int 将信号与插槽连接时。喜欢 self.buttonClicked[str].connect(showDialog) .

    如果现在我发出两个信号:

    self.buttonClicked[str].emit('soru')
    self.buttonClicked[int].emit(23)
    

    然后才是 版本将调用showDialog。 现在,我在连接时不指定重载版本,例如:

    self.buttonClicked.connect(showDialog)
    

    pyqtSignal([int],[str])

    资料来源: source