一、普通对话框
(一)简介
QDialog是对话框窗口的基类对话框,主要用来执行短期任务或者与用户进行互动,它可以是模态的,也可以是非模态的。对话框没有菜单栏、工具栏、状态栏。模态指的是窗口打开的时候,它底下的父窗口是不可操作的;非模态就是当我们打开一个子窗口的时候,其下面的窗口也是可以操作的。对话框可以衍生为颜色选择对话框(QColorDialog)、字体对话框(DFontDialog)、文件选择对话框(DFileDialog)、输入对话框(DInputDialog)、消息确认框(QMessageBox)、进度条对话框(QProgressDialog)等等。继承关系如下:
对于主窗口的选择如果包含状态栏、工具栏、菜单栏等可以使用QMainWindow。如果只是对话框形式不包含以上几种就可以使用QDialog。如果不确定或者说他会作为顶层窗口(没有父窗口的窗口就是顶层窗口)或者嵌入到其他窗口中,那么就可以使用最根本的基类QWidget类。
QWidget控件和窗口的父类 ,自由度高(什么都东西都没有),没有划分菜单、工具栏、状态栏、主窗口 等区域
QMainWindow是QWidget
的子类,包含菜单栏,工具栏,状态栏,标题栏等,中间部分则为主窗口区域。
二、消息对话框(称为弹窗更妥)
QMessageBox提供两套接口来实现,一种是static functions(静态方法调用),另外一种 the property-base API(基于属性的API)。直接调用静态方法是一种比较简单的途径,但是没有基于属性API的方式灵活。在QT的官网上推荐使用the property-base API。
(一)API
1.创建消息对话框
创建消息对话框共两个基本步骤,其余均为中间操作:
# 1.创建消息对话框
messageBox=QMessageBox()
# 2.执行提示框并等待用户操作。
messageBox.exec_()
2.方法和属性
(1)设置标题
messageBox.setWindowTitle()
(2)设置提示框的文本内容。
messageBox.setText()
(3)设置标准按钮
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
# 多个标准按钮之间用"|"拼接
'''
参数值及其含义:
QMessageBox.Ok # 使用AcceptRole定义的“确定”按钮。
QMessageBox.Open # 使用AcceptRole定义的“打开”按钮。
QMessageBox.Save # 使用AcceptRole定义的“保存”按钮。
QMessageBox.Cancel # 使用RejectRole定义的“取消”按钮。
QMessageBox.Close # 使用RejectRole定义的“关闭”按钮。
QMessageBox.Discard # “丢弃”或“不保存”按钮,具体取决于使用DestructiveRole定义的平台。
QMessageBox.Apply # 使用ApplyRole定义的“应用”按钮。
QMessageBox.Reset # 使用ResetRole定义的“重置”按钮。
QMessageBox.RestoreDefaults # 使用ResetRole定义的“恢复默认值”按钮。
QMessageBox.Help # 使用HelpRole定义的“帮助”按钮。
QMessageBox.SaveAll # 使用AcceptRole定义的“全部保存”按钮。
QMessageBox.Yes # 使用YesRole定义的“是”按钮。
QMessageBox.YesToAll # 使用YesRole定义的“Yes to All”按钮。
QMessageBox.No # 使用NoRole定义的“否”按钮。
QMessageBox.NoToAll # 使用NoRole定义的“No to All”按钮。
QMessageBox.Abort # 使用RejectRole定义的“Abort”按钮。
QMessageBox.Retry # 使用AcceptRole定义的“重试”按钮。
QMessageBox.Ignore # 使用AcceptRole定义的“忽略”按钮。
QMessageBox.NoButton # 无效按钮。
'''
(4)获取标准按钮
standardButton()
(5)获取某个按钮
参数值的同方法(3)
messageBox.button()
(6)获取所有按钮,返回一列表,元素全部为按钮对象
messageBox.buttons()
(7)设置图标
messageBox.setIcon()
'''
参数值的含义:
内置图标
QMessageBox.Noicon # 消息框没有任何图标
QMessageBox.Question # 一个图标,表示该消息正在提问
QMessageBox.Information # 一个图标,表示该消息没有任何异常
QMessageBox.Warning # 一个图标,表示改消息是一个警告
QMessageBox.Critical # 一个图标,表示该消息代表一个严重问题、
自定义图标
setIconPixmap(QPixmap)
'''
(8)设置自定义图标
messageBox.setIconPixmap()
示例代码:
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(100,80,Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
(9)获取自定义图标对象
messageBox.iconPixmap()
(10)设置提示文本和获取提示文本
messageBox.setInformativeText(str) # 设置提示文本,接受富文本
messageBox.informativeText()-> str # 获取提示文本内容
(11)置详细文本和获取详细文本
messageBox.setDetailedText(self, str) # 设置详细文本,不接受富文本
messageBox.detailedText()->str # 获取详细文本内容
(12)设置复选框和获取复选框
messageBox.setCheckBox(self, QCheckBox) # 设置复选框
messageBox.checkBox(self)->QCheckBox # 获取复选框,返回QCheckBox对象
(13)执行提示框并等待用户操作
返回值是一组数字,表示某个按钮,由此可见按钮的名称同样可以用数字设置,有空时可以研究一下。
messageBox.exec_()
3.信号
buttonClicked(QAbstractButton button) # 按钮被点击时发射该信号,传递被点击的按钮对象
4.代码
(1)练习代码
结合学习资料自己编写的代码。
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
'''
学习资料来源:https://blog.csd