模态模式:子窗口阻塞父窗口的事件消息
非模态模式:子窗口不阻塞父窗口的事件消息
pyqt5中通过setWindowModality()来设置子窗口的模式,各种模式的取值及含义如下:
常量 | 值 | 含义 |
---|---|---|
Qt.NonModal | 0 | 设置子窗口为非模态模式,这也是窗口的默认模式 |
Qt.WindowModal | 1 | 设置子窗口为窗口模态,即阻塞父窗口、祖父窗口、祖..父窗口(通过一直self.parent()可以获取到的窗口) |
Qt.ApplicationModal | 2 | 设置子窗口为应用模态,即阻塞此应用下的所有窗口 |
在pyqt中,QWidget是一个部件而不是一个窗口,上面所说的模式对QWidget是无效的,所以如果一个窗口直接继承自QWidget,那么至少要给窗口设置一个Qt.Window(self.setWindowFlags(Qt.Window))使其成为一个真正的窗口才能适用于上面所说的模式设置,当然其他包含Qt.Window的flag也都是可以的。
在pyqt中,模态阻塞的只是窗口的事件消息,不会阻塞应用流程