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

时间:2017-07-10 18:16:48

标签: python python-3.x pyqt pyqt5 signals-slots

我正在使用带2次重载的信号

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

我想只用插槽连接一个重载(int)。每当我调用发出另一个重载(str)时,我都不希望发生任何事情。怎么做到这一点?

mailtext

1 个答案:

答案 0 :(得分:0)

好的,我搜索了网络,我以某种方式找到了解决方案和一些有趣的东西。

首先,当使用emit()时,我必须通过指定类型来指定重载。

例如,在上面的例子中,如果我想发出str版本的信号,我必须调用self.buttonClicked[str].emit('soru')。 其次,我必须通过告知它在将信号与插槽连接时strint来指定重载版本的详细信息。喜欢 self.buttonClicked[str].connect(showDialog)

所以如果现在我专门发出2个信号:

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

然后只有str版本会调用showDialog。 现在我在连接时没有指定重载版本:

self.buttonClicked.connect(showDialog)

然后,只会调用在创建pyqtSignal([int],[str])时首先指定的重载版本。所以在这里,只有' int'版本将连接到插槽。

来源:source