继承于 QWidget
应用程序级别的模态对话框:当模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口----exec()
窗口级别的模态对话框:该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互----open()
非模态对话框:不会阻塞与对话框关联的窗口以及与其他窗口进行交互----show()
importsysfrom PyQt5.QtWidgets importQApplication, QWidget,QDialog,QPushButtonclassDemo(QWidget):def __init__(self):
super().__init__()
self.resize(300,300)
self.setWindowTitle('QDialog')
dl=QDialog(self) #创建对话框但不显示
#参数:就是对话框关联的窗口
self.dl=dl
dl.setWindowTitle('对话框')#dl.exec() #显示对话框--模态对话框---应用程序级别
#dl.open() #显示对话框--模态对话框---窗口级别
dl.resize(200,200)#dl.setModal(True) #设置成模态对话框
#此指令展示后,show显示的也是模态--默认窗口级别
#dl.setWindowModality(Qt.WindowModal) #设置对话框的级别
#Qt.NonModal 非模态对话框
#Qt.WindowModal 窗口级别
#Qt.ApplicationModal 应用程序级别
dl.setSizeGripEnabled(True)#是否显示尺寸调整控件
#isSizeGripEnabled() -> bool 返回是否显示尺寸调整控件
btn=QPushButton('接受',dl)
btn.move(20,100)
btn.clicked.connect(self.AA)
btn1= QPushButton('拒绝', dl)
btn1.move(120, 100)
btn1.clicked.connect(self.BB)
btn2= QPushButton('完成', dl)
btn2.move(120, 150)
btn2.clicked.connect(self.CC)#信号
dl.accepted.connect(self.DD) #接受槽函数
dl.rejected.connect(self.EE) #拒绝槽函数
dl.finished.connect(self.FF) #完成槽函数
#会向槽函数传递一个值--接受=1;拒绝=0,完成-自定义的值
#点击接受或拒绝,完成槽函数也运行
#dl.show() #显示对话框--非模态对话框
s=dl.exec() #通过返回值可以知道点击了哪个按钮
defFF(self,val):print('点击了完成按钮',val)defEE(self):print('点击了拒绝按钮')defDD(self):print('点击了接受按钮')defAA(self):
self.dl.accept()#发出接受信号--显示对话框函数的返回值1
defBB(self):
self.dl.reject()#发出拒绝信号--显示对话框函数的返回值0
defCC(self):
self.dl.done(8) #发出完成信号--显示对话框函数的返回值8--自定义返回值
#dl.setResult(99) #不关闭对话框-直接设置对话框的返回值
#result() -> int 获取返回值
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=Demo()
demo.show()
sys.exit(app.exec_())
子类:QFontDialog--字体对话框
方法一:
importsysfrom PyQt5.QtWidgets importQApplication, QWidget,QPushButton,QFontDialog,QLabelclassDemo(QWidget):def __init__(self):
super().__init__()
self.resize(300,300)
self.setWindowTitle('QFontDialog') #创建字体对话框--但不显示
#QFontDialog(QFont, parent: QWidget = None) ---带默认字体
self.label=QLabel('塘沽五中',self)
self.label.move(100,10)
self.fdl=QFontDialog(self)
btn=QPushButton('按钮',self)
btn.move(100,250)
btn.clicked.connect(self.AA)#self.fdl.setOption(QFontDialog.NoButtons) #选项控制--单个选项
#QFontDialog.NoButtons 不显示“ 确定”和“ 取消”按钮。(对“实时对话框”有用。)
#参数2 True--设置该选项;False--取消该选项
#self.fdl.setOptions(QFontDialog.NoButtons | QFontDialog.MonospacedFonts) # 选项控制--多个选项
#QFontDialog.MonospacedFonts 只显示等宽字体
#QFontDialog.ProportionalFonts 显示比例字体
#QFontDialog.NonScalableFonts 显示不可缩放的字体
#QFontDialog.ScalableFonts 显示可缩放字体
#QFontDialog.DontUseNativeDialog 在Mac上使用Qt的标准字体对话框而不是Apple的原生字体面板。
#s=self.fdl.testOption(QFontDialog.NoButtons) #测试某个选项是否可以生效
#options() -> QFontDialog.FontDialogOption 获取当前的选项
#print(s)
#信号
self.fdl.currentFontChanged.connect(self.CC)#会向槽函数传递一个QFont
defCC(self,font):print('当前字体改变了',font)
self.label.adjustSize()
self.label.setFont(font)defAA(self):#self.fdl.open(self.BB)
#参数 槽函数--可选--点击字体对话框的OK按钮时,自动执行槽函数
s=self.fdl.exec()#点击确定按钮返回1,点击取消按钮返回0
ifs :print(self.fdl.selectedFont())#setCurrentFont(QFont) 设置当前字体
#currentFont() -> QFont 返回当前字体
defBB(self):print('字体已经被选择')
s=self.fdl.selectedFont() #返回字体对话框的字体
#
print(s)if __name__ == '__main__':
app=QApplication(sys.argv)
demo=Demo()
demo.show()
sys.exit(app.exec_())
方法二:
importsysfrom PyQt5.QtWidgets importQApplication, QWidget,QPushButton,QFontDialog,QLabelfrom PyQt5.QtGui importQFontclassDemo(QWidget):def __init__(self):
super().__init__()
self.resize(300,300)
self.setWindowTitle('QFontDialog') #创建字体对话框--但不显示
self.label=QLabel('塘沽五中',self)
self.label.move(100,10)
self.font=QFont('华文琥珀',20,QFont.Bold)
btn=QPushButton('按钮',self)
btn.move(100,250)
btn.clicked.connect(self.AA)defAA(self):#r=QFontDialog.getFont(self) #弹出字体对话框
#点击按钮后,返回一个元组--字体QFont和True或False(True表示点击的是确定按钮,False表示点击的是取消按钮)
#(, True)
r= QFontDialog.getFont(self.font,self,&