2017-07-18 3 views
-1

Je souhaite connecter le signal émis par la méthode de classe closeWidgetUI à la méthode de classe addTool. Mais cela ne semble fonctionner qu'avec PyQt4 et pas avec PySide. Chaque fois que je clique sur le bouton closeButton créé dans self.close_btn.clicked.connect (self.closeWidgetUI), le programme se bloque et se ferme. Toute suggestion?Connexion du signal issu de la méthode Classe dans différents signaux personnalisés de la classe Classe PySide

import PySide.QtCore as qc 
import PySide.QtGui as qg 

class InterpolateIt(dc,qg.QDialog): 
    def __init__(self): 
     qg.QDialog.__init__(self) 

     """ MORE THINGS 
     OVER THIS PART NOT IMPORTANT AT MOMENT""" 

     add_button.clicked.connect(self.addTool) 

    def addTool(self): 

     #NEED TO CONNECT closeWidgetUI EMITED SIGNAL HERE 
     new_widget = InterpolateWidget() 
     self.clicked.connect(new_widget, qc.SIGNAL('CLOSE'), self.removeTool) 

    def removeTool(self,interpWidget): 
     self.interpolateLayout.removeWidget(interpWidget) 
     interpWidget.deleteLater() 


# ------------------------------------------------------------------------------------------------------#   
class InterpolateWidget(qg.QFrame): 
    def __init__(self): 
     qg.QFrame.__init__(self) 

     """ MORE THINGS 
     OVER THIS PART NOT IMPORTANT AT MOMENT""" 

     # HERE BUTTON EMIT SIGNAL AT CLICKED 
     self.close_btn.clicked.connect(self.closeWidgetUI) 

     # TRIGGER THIS FUNC 
    def closeWidgetUI(self): 
     self.emit(qc.SIGNAL('CLOSE'), self) 

Répondre

0
from functools import partial 

def addTool(self): 

     #NEED TO CONNECT closeWidgetUI EMITED SIGNAL HERE 
     new_widget = InterpolateWidget() 
     deleteTool = partial(self.removeTool,new_widget) 
     new_widget.close_btn.clicked.connect(deleteTool) 

je l'ai fait de cette façon! grâce à mon cerveau :) acclamations