PySide / PyQt QMainWindow如何关闭QDockWidget?

时间:2014-01-31 18:51:16

标签: python python-3.x pyqt pyside

我需要知道QDockWidget是如何正常关闭的。我有一个连接到QDockWidget的串口/线程,我需要确保线程和串口正常关闭。

class SerialDock(QDockWidget):
    ...

    def close(self):
        print("Close")
        self.serialport.close()
        self.thread.close()

    def closeEvent(self, event):
        print("closeEvent")
        self.serialport.close()
        self.thread.close()

单击QMainWindow X按钮时,不会调用close和closeEvents。我是否必须从QMainWindow关闭调用close方法?我知道解决这个问题的唯一方法是使用QApplication.aboutToQuit信号,我真的不想记得为一个特定的小部件设置它。 QDockWidget如何被销毁或关闭?

1 个答案:

答案 0 :(得分:1)

您可以使用destroyed中的QDockWidget信号:

import PyQt4.QtGui as ui
import PyQt4.QtCore as core

app = ui.QApplication([])

mw = ui.QMainWindow()
mw.setCentralWidget(ui.QTextEdit())

dw = ui.QDockWidget("Test",mw)
dw.setWidget(ui.QLabel("Content"))

mw.addDockWidget(core.Qt.RightDockWidgetArea, dw)

def onDestroy(w):
    print("Do stuff here")
    print(w)

dw.destroyed.connect(onDestroy)

mw.show()
app.exec_()