Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyQt how to get sender (widget) in closeEvent?

I'm trying to catch a closeEvent for several dockWidgets that get added dynamically to a QMainWindow. It is unclear to me how I can figure out which widget has been closed.. Here's an simplified example:

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() doesn't seem to exist.. any ideas ?

thanks

like image 436
joplaete Avatar asked Oct 17 '25 07:10

joplaete


2 Answers

One way to achieve what you want would be to use an 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_())
like image 110
ekhumoro Avatar answered Oct 19 '25 19:10

ekhumoro


def dockWidgetCloseEvent(self, event):
    self.sender()
like image 24
Yinon Ehrlich Avatar answered Oct 19 '25 19:10

Yinon Ehrlich



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!