如何专门连接到过载信号?
How to specifically connect to overloaded signals?
我正在使用带有 2 个重载的信号
buttonClicked = pyqtSignal([int],[str])
我只想连接一个 overload(int) 和一个插槽。每当我调用 emit 另一个 overload(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
好的,我在网上搜索了一下,不知何故找到了解决方案和一些有趣的东西。
首先,当使用 emit()
时,我必须通过指定类型来指定重载。
例如在我上面的例子中,如果我想发出 str
版本的信号,我必须调用 self.buttonClicked[str].emit('soru')
。
其次,我必须通过在将信号与插槽连接时告诉它是 str
还是 int
来指定重载版本详细信息。像
self.buttonClicked[str].connect(showDialog)
.
所以如果现在我专门发出 2 个信号:
self.buttonClicked[str].emit('soru')
self.buttonClicked[int].emit(23)
那么只有str
版本会调用showDialog。
现在我在连接时不指定重载版本 like:
self.buttonClicked.connect(showDialog)
那么只有在创建 pyqtSignal([int],[str])
时首先指定的重载版本才会被调用。所以在这里,只有 'int' 版本会连接到插槽。
来源:source
我正在使用带有 2 个重载的信号
buttonClicked = pyqtSignal([int],[str])
我只想连接一个 overload(int) 和一个插槽。每当我调用 emit 另一个 overload(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
好的,我在网上搜索了一下,不知何故找到了解决方案和一些有趣的东西。
首先,当使用 emit()
时,我必须通过指定类型来指定重载。
例如在我上面的例子中,如果我想发出 str
版本的信号,我必须调用 self.buttonClicked[str].emit('soru')
。
其次,我必须通过在将信号与插槽连接时告诉它是 str
还是 int
来指定重载版本详细信息。像
self.buttonClicked[str].connect(showDialog)
.
所以如果现在我专门发出 2 个信号:
self.buttonClicked[str].emit('soru')
self.buttonClicked[int].emit(23)
那么只有str
版本会调用showDialog。
现在我在连接时不指定重载版本 like:
self.buttonClicked.connect(showDialog)
那么只有在创建 pyqtSignal([int],[str])
时首先指定的重载版本才会被调用。所以在这里,只有 'int' 版本会连接到插槽。
来源:source