【问题标题】:How does PySide/PyQt QMainWindow close a QDockWidget?PySide/PyQt QMainWindow 如何关闭 QDockWidget?
【发布时间】:2014-01-31 18:51:16
【问题描述】:

我需要知道 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 调用 close 方法?我知道解决这个问题的唯一方法是使用 QApplication.aboutToQuit 信号,我真的不想记住为一个特定的小部件设置它。 QDockWidget 是如何被销毁或关闭的?

【问题讨论】:

    标签: python python-3.x pyqt pyside


    【解决方案1】:

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

    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_()
    

    【讨论】:

    • 这行得通,但我收到信号太晚了,无法关闭我的其他项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2015-01-15
    • 2016-11-08
    • 2014-04-27
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多