2017-07-10 5 views
0

私はスロットに一つだけのオーバーロード(int)を接続したい2つの過負荷過負荷信号に具体的に接続する方法は?

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

で信号を使用しています。私がemitを他のオーバーロード(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 

答えて

0

私はウェブを検索して、何とか解決策と面白いことを見つけました。

最初にemit()を使用する場合、タイプを指定して過負荷を指定する必要があります。

たとえば、上記の例では、strバージョンの信号を送信する場合は、self.buttonClicked[str].emit('soru')に電話する必要があります。 2番目に、信号をスロットに接続するときに、strまたはintの場合、オーバーロードされたバージョンの詳細を指定する必要があります。同様に 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

関連する問題