模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口。非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框。
如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了;非模态对话框则不是阻塞型的线程模型,父子线程可以并行运行。
在Qt中创建模态对话框,主要用到了QDialog的exec函数。
以下代码演示如何用PyQt创建模态对话框和非模态对话框:
#!/usr/bin/env python
#coding=utf-8
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ModelFontProperDlg(QDialog):
def __init__(self,parent=None):
super(ModelFontProperDlg,self).__init__(parent)
FontStyleLabel = QLabel(u"中文字体:")self.FontStyleComboBox = QComboBox()self.FontStyleComboBox.addItems([u"宋体",u"黑体",u"仿宋",u"隶书"])FontSizeLabel = QLabel(u"字体大小")self.FontSizeSpinBox = QSpinBox()self.FontSizeSpinBox.setRange(0,90)self.FontEffectCheckBox = QCheckBox(u"使用特效")okButton = QPushButton(u"确定")cancelButton =QPushButton(u"取消")
buttonLayout = QHBoxLayout()buttonLayout.addStretch()