一、QDialog简介
QDialog包含了QErrorMessage、QProgressDialog和QMessageBox三个子类。
二、子类QErrorMessage
1、简单介绍
错误消息小部件由文本标签和复选框组成;
该复选框允许用户控制将来是否再次显示相同的错误消息。
2、功能作用
代码:
1 # *******************QErrorMessage**********************开始 2 from PyQt5.Qt import * 3 4 class Window(QWidget): 5 def __init__(self): 6 super().__init__() 7 self.setWindowTitle("QErrorMessage") 8 self.resize(500, 500) 9 self.setup_ui() 10 11 def setup_ui(self): 12 # em = QErrorMessage(self) 13 # em.setWindowTitle("错误提示") 14 # em.showMessage("哈哈,明天你好") 15 # em.show() 16 17 # QErrorMessage.qtHandler() 18 # # qDebug("xxxxxx") 19 # qWarning("12344") 20 pass 21 22 if __name__ == '__main__': 23 import sys 24 25 app=QApplication(sys.argv) 26 27 window=Window() 28 window.show() 29 30 QErrorMessage.qtHandler() 31 # qDebug("xxxxxx") 32 qWarning("12344") 33 34 sys.exit(app.exec_()) 35 # *******************QErrorMessage**********************结束
三、子类QProgressDialog
1、简单介绍
提供了一个缓慢的操作进度反馈;进度对话框用于向用户指示操作将花费多长时间,并演示应用程序尚未冻结。
它还可以为用户提供中止操作的机会。
2、构造函数
3、弹出
(1)框架
(2)操作及展示
1 pd = QProgressDialog(self) 2 pd.open(lambda: print("对话框被取消")) 3 pd.setAutoClose(False) # 取消自动关闭 4 # pd.setValue(50) 5 pd.setMinimumDuration(0) # 设置等待时间为0 6 for i in range(1, 101): 7 pd.setValue(i)
1 pd = QProgressDialog("xx1","xxx2",1,1000,self)
4、界面内容设置
(1)框架
(2)操作及展示
1 # 界面内容设置 2 pd.setWindowTitle("进度对话框") 3 # 其余的一样
5、数据处理+是否取消+自动操作
(1)框架
(2)操作及展示
1 pd.setLabelText("下载进度") 2 pd.setCancelButtonText("取消下载") 3 pd.setRange(0, 100) 4 pd.setValue(95) 5 print(pd.minimum()) 6 # pd.setAutoReset(False) # 取消自动重置 7 8 timer = QTimer(pd) 9 10 11 def test(): 12 if pd.value() + 1 >= pd.maximum() or pd.wasCanceled(): 13 timer.stop() 14 # 自动关闭窗口有三个条件:值达到最大,自动重置,自动关闭属性为True 15 pd.setValue(pd.value() + 1) 16 17 18 timer.timeout.connect(test) 19 timer.start(1000)
四、子类QMessageBox
1、简单介绍
用于通知用户或请求用户的提问和接收应答一个模态对话框。
2、展示
(1)框架
(2)操作及展示
1 mb = QMessageBox(self) 2 # mb.setModal(False) # 设置为非模态 3 mb.setWindowModality(Qt.NonModal) # 设置为非模态 4 mb.show()
3、内容展示
(1)对话框标题、图标、主要标题
1 # 对话框标题、图标 2 # mb = QMessageBox(QMessageBox.Warning,'xxx1','<h2>xx2</h2>',QMessageBox.Ok | QMessageBox.Discard,self) 3 mb = QMessageBox(self) 4 mb.setWindowTitle("消息盒子") # 窗口标题 5 mb.setIconPixmap(QPixmap('xxx.png').scaled(50, 50)) 6 mb.setText("<h3>文件内容已经被修改<.h3>") # 主要标题 7 mb.setInformativeText("是否直接关闭,不保存?") # 提示信息 8 mb.setCheckBox(QCheckBox("下次不再提醒", mb)) # 设置复选框 9 mb.setDetailedText("<h4>你修改的内容是给每一行代码添加了一个分号</h4>") # 详情文本 10 11 # 主要标题 12 # mb.setTextFormat(Qt.PlainText) # 主要标题设置为普通文本 13 mb.setTextFormat(Qt.RichText) # 主要标题设置为富文本
(2)提示文本、详细文本、复选框
在上面已经操作过,参考上面的内容。
按钮的一些详细分类:
按钮的补充内容如下:(两部分)
1 # 标准按钮 2 # mb.setStandardButtons(QMessageBox.Yes | QMessageBox.No) 3 4 # 添加/移除角色按钮 5 btn = QPushButton('xxx1', mb) 6 mb.addButton(btn, QMessageBox.YesRole) 7 # mb.addButton(QPushButton('xxx2',mb),QMessageBox.NoRole) 8 btn2 = mb.addButton('xxx2', QMessageBox.NoRole) # 有返回结果 9 # mb.removeButton(btn) # 移除按钮 10 # mb.removeButton(btn2) # 移除按钮 11 12 # 默认按钮 13 mb.setDefaultButton(btn2) # 默认选中xxx2按钮 14 15 # 退出按钮 16 mb.setEscapeButton(btn2) # esc关联btn2 17 18 19 # 信号 20 def test(btn): 21 if btn == btn2: 22 print("点击了第二个按钮") 23 else: 24 print("点击了第一个按钮") 25 26 27 mb.buttonClicked.connect(test) 28 29 mb.show()
4、文本交互
1 # 文本交互 2 mb.setTextInteractionFlags(Qt.TextEditorInteraction) # 控制主要标题
5、静态方法
1 # 静态方法 2 # QMessageBox.about(self,'xx1','xx2') # 关于对话框 3 # QMessageBox.aboutQt(self,'xx1') # 关于qt 4 result = QMessageBox.question(self, 'xx1', 'xx2', QMessageBox.Ok | QMessageBox.Discard, QMessageBox.Discard) 5 print(result, 'xxx')