python - PyQt 如何在 closeEvent 中获取发件人(小部件)?

标签 python pyqt4 qdockwidget

我正在尝试为动态添加到 QMainWindow 的几个 dockWidget 捕获一个 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() 似乎不存在.. 有什么想法吗?

谢谢

最佳答案

实现您想要的效果的一种方法是使用 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_())

关于python - PyQt 如何在 closeEvent 中获取发件人(小部件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644963/

相关文章:

python - 派克: 'dynamically' append to qtextedit from function

qt - 如何制作透明的QT Dock Widget

c++ - 嵌套 QDockWidgets

码头的 Qt 调整大小事件

python - 筛选 Excel 表格

python - 使用开发服务器上的祖先从 AppEngine 数据存储区读取 100 行时出现性能问题。

python - 抽象方法的装饰器顺序

python - QTreeView/QStandardItemModel 中选定的行

python - PyQt - 在其他函数运行时显示 GIF

Python/MySQL Select 返回 None with %s