PyQt 把子窗口转换为模态窗口

问题描述:

模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口。

解决方法:

方法1:

子窗口继承QDialog类,然后使用 exec() 显示

  • 但是Qt文档中并不提倡这种方法,而是建议用open()代替exec()。因为open()是异步的,可以防止在打开dialog的时候删除dialog的父级。

为什么要避免使用exec()

方法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() 

话题链接


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部