PySide/PyQt QMainWindow 如何关闭 QDockWidget?
Posted
技术标签:
【中文标题】PySide/PyQt QMainWindow 如何关闭 QDockWidget?【英文标题】:How does PySide/PyQt QMainWindow close a 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 是如何被销毁或关闭的?
【问题讨论】:
【参考方案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_()
【讨论】:
这行得通,但我收到信号太晚了,无法关闭我的其他项目。以上是关于PySide/PyQt QMainWindow 如何关闭 QDockWidget?的主要内容,如果未能解决你的问题,请参考以下文章
PySide/PyQt 中 QTableWidget 的 QMenu
在 PySide/PyQt 中使用 drawPolyline 制作动画波浪