2012-09-28 77 views
3

我試圖捕捉一個closeEvent的幾個dockWidgets動態添加到QMainWindow。這是我不清楚我怎麼能弄清楚哪些部件已經被關閉。這裏是一個簡單的例子:PyQt如何獲取發件人(小部件)在closeEvent?

class Example(QtGui.QMainWindow): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.leftDockWidget = QtGui.QDockWidget('pick tool', self) 
     self.leftDockWidget.setWidget(QtGui.QLabel('a dock widget')) 
     self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.leftDockWidget) 
     self.leftDockWidget.closeEvent = self.dockWidgetCloseEvent  
     self.show() 

    def dockWidgetCloseEvent(self, event): 
     print event 
     # how to get sender widget ?  

event.sender()似乎不存在.. 任何想法?

感謝

回答

5

一種方式來實現你想要的是使用一個event filter

from PyQt4 import QtGui, QtCore 

class Example(QtGui.QMainWindow): 
    def __init__(self): 
     super(Example, self).__init__() 
     self.leftDockWidget = QtGui.QDockWidget('pick tool', self) 
     self.leftDockWidget.setWidget(QtGui.QLabel('a dock widget')) 
     self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.leftDockWidget) 
     self.leftDockWidget.installEventFilter(self) 

    def eventFilter(self, source, event): 
     if (event.type() == QtCore.QEvent.Close and 
      isinstance(source, QtGui.QDockWidget)): 
      print source.windowTitle() 
     return super(Example, self).eventFilter(source, event) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Example() 
    window.show() 
    sys.exit(app.exec_()) 
+0

的感謝!這確實能夠完成這項工作。 – joplaete

2
def dockWidgetCloseEvent(self, event): 
    self.sender()