问题描述:
模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口。
解决方法:
方法1:
子窗口继承QDialog类,然后使用 exec() 显示
- 但是Qt文档中并不提倡这种方法,而是建议用open()代替exec()。因为open()是异步的,可以防止在打开dialog的时候删除dialog的父级。
方法2:
widget.setWindowModality(Qt.ApplicationModal)
widget.show()
如果仅仅希望锁定其他的窗口而非整个应用程序
widget.setWindowFlags(widget.windowFlags() | Qt.Window)
widget.setParent(otherWindow)
widget.setWindowModality(Qt.WindowModal)
widget.show()
其他问题
窗口弹出后闪退。
可能是窗体被python自动垃圾回收了,如果在类中实例化模态窗口,用属性来代替局部变量存储模态窗口的实例。
# 这样会被自动回收
widget = QDialog()
widget.show()
# 可以使用属性存储
self.widget = QDialog()
self.widget.show()
# 或者对实例指定一个父控件
widget = QDialog(parent)
widget.show()