继承QDialog
它是由这些部分组成的
它是可以使用标准图标的,比如
- 消息图标
- 错误图标
- 警告图标
- 提问图标
- 无图标
目录
1.5.1 设置 setInformativeText(str)
1.6.1 设置 setDetailedText(self, str)
1 基本操作
1.1 构造函数
1.1.1 方式一
一种是可以只放父对象
QMessageBox(parent: QWidget = None)
虽然我使用的是show()这个方法,但是我们无法将焦点放到其他的窗口上,也就是说即使用show(),弹出的窗口也是模态的
如果想搞成非模态的可用父控件QDialog中的setModal(False)的方法
1.1.2 方式二
另一种可以依次放入
- 图标
- 窗口标题
- 主提示语
- 多个按钮
- 父对象
- 样式
QMessageBox(QMessageBox.Icon, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.NoButton, parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint)
在构造函数中,我们只能使用标准图标,所有标准图标如下所示
- QMessageBox.NoIcon 没有图标
- QMessageBox.Question 提问图标
- QMessageBox.Information 消息图标
- QMessageBox.Warning 警告图标
- QMessageBox.Critical 错误图标
- QMessageBox.Ok ok按钮(确定)
- QMessageBox.Open open按钮(打开)
- QMessageBox.Save save按钮(保存)
- QMessageBox.Cancel cancel按钮(取消)
- QMessageBox.Close close按钮(关闭)
- QMessageBox.Discard discard按钮(不保存)
- QMessageBox.Apply apply按钮(应用)
- QMessageBox.Reset reset按钮(重置)
- QMessageBox.RestoreDefaults RestoreDefaults按钮(恢复默认值)
- QMessageBox.Help help按钮(帮助)
- QMessageBox.SaveAll saveall按钮(全部保存)
- QMessageBox.Yes yes按钮(是)
- QMessageBox.YesToAll YesToAll按钮(全部是)
- QMessageBox.No No按钮(否)
- QMessageBox.NoToAll NoToAll按钮(全部否)
- QMessageBox.Abort Abort按钮(关于)
- QMessageBox.Retry Retry按钮(重试)
- QMessageBox.Ignore Ignore按钮(忽略)
- QMessageBox.NoButton 无按钮
下面我们创建一个消息对话框,图标使用提问图标,窗口标题为 窗口标题,主提示语为 主提示语 按钮添加OK和取消
主提示语处可以使用富文本
1.2 设置对话框标题 setWindowTitle()
父类中的方法,不测试了
1.3 图标设置
1.3.1 标准图标 setIcon()
我们现在使用只传入父对象的构造函数
此时的信息对话框是这个样子的
现在我们加入一个信息图标
1.3.2 自定义图标 setIconPixmap()
我们现在把之前的气球图片放到里面
我们如果觉得太大了,我们可以对QPixmap进行修改
比如我们想搞成50*50像素的
1.4 设置主要标题 setText(str)
- 主要标题接受写入html富文本字符串
我们也可以设置文本格式
默认是Qt.AutoText这个就不测试了
1.5 提示文本
1.5.1 设置 setInformativeText(str)
我们就不取消之前的主要标题了
- 提示文本接受写入html富文本字符串
1.5.2 获取 informativeText()
1.6 详细文本
1.6.1 设置 setDetailedText(self, str)
之前的标题我们就不取消了
运行之后是这样的
此时我们点击详细文本
- 详细文本不支持富文本
1.6.2 获取 detailedText()
1.7 复选框
1.7.1 设置 setCheckBox()
1.7.2 获取 checkBox()
2 按钮操作
2.1 添加按钮
有三种写法
这里涉及到一个参数 QMessageBox.ButtonRole 该参数可以设置的值如下所示
- QMessageBox.InvalidRole 该按钮无效
- QMessageBox.AcceptRole 确定
- QMessageBox.RejectRole 取消
- QMessageBox.DestructiveRole 不保存
- QMessageBox.ActionRole 激活
- QMessageBox.HelpRole 帮助
- QMessageBox.YesRole 是
- QMessageBox.NoRole 否
- QMessageBox.ApplyRole 应用
- QMessageBox.ResetRole 重置
- 第一种写法 addButton(self, QAbstractButton, QMessageBox.ButtonRole)
设置一个自定义的按钮
点击完之后,直接关闭了对话框
这一种方法添加按钮后没有返回值
- 第二种 addButton(self, str, QMessageBox.ButtonRole) -> QPushButton
添加一个指定角色的按钮,可以修改按钮上的标签
我们现在设置yes角色按钮,修改上面的文字信息为hello
这一种方法是有返回值的,所有我们可以这样写
- addButton(self, QMessageBox.StandardButton) -> QPushButton
添加一个标准按钮,现在我们添加一个全部否的按钮
2.2 移除按钮 removeButton()
我们使用刚刚添加的按钮进行测试
为了可以删除我把之前的按钮单独搞成一个变量
当前的对话框是这样的
我们现在去除这个按钮
上面另外两种添加方式直接把添加方式的返回值放入参数里就行了
2.3 标准按钮
2.3.1 设置 setStandarButtons()
可以设置多个,我们现在设置应用和重置按钮
这两个按钮没设置功能之前是没有任何作用的
2.3.2 获取
2.3.2.1 获取单个按钮 standardButton()
我们使用之前创建的btn3作为参数
如果在之前一起设置了多个标准按钮则会报错
2.3.2.2 获取所有按钮 standardButton()
2.4 默认按钮
当按钮被设置为默认按钮时,按钮会处于被选中状态
2.4.1 设置 setDefaultButton()
我们当前有三个按钮,其中hello是默认按钮
设置默认按钮有两种写法
- setDefaultButton(self,QPushButton)
我们现在打算设置No to All为默认按钮
- setDefaultButton(self,QMessageBox.StandardButton)
我们用另一种方式把No to All作为默认按钮
2.4.2 获取 defaultButton()
2.5 退出按钮
当按钮被设置为退出按钮,按ESC键会模拟点击这个按钮,并且下Esc后会关闭对话框
为了让效果更明显,我们给设置了退出按钮的按钮加上一个槽函数
由于默认情况下,按下Esc会触发No To All按钮,所以我们这次取消not to all 按钮
2.5.1 设置 setEscapeButton()
有两种写法
- setEscapeButton(self,QAbstractButton)
运行之后是这样的
现在我们按下Esc按钮
窗口被关闭,信号触发
- setEscapeButton(self,QMessageBox.StandardButton)
我们此时再添加一个标准按钮
然后将它设置为退出按钮
之后再给一个槽函数
运行之后是这样的
我们此时按一下Esc
窗口被关闭,信号被触发
2.5.2 获取 escapeButton()
2.6 获取按钮
2.6.1 获取指定的标准按钮 button()
我们现在获取标准的保存按钮
2.6.2 获取所有的按钮 buttons()
当前一共有三个按钮,上面的返回信息本来是一行返回的,不好截取我就截成三行了
2.7 获取按钮角色 buttonRole()
2.8 获取被点击的按钮 clickedButton()
我们使用信号 buttonClicked()来展示效果,当按钮被点击时触发这个信号
运行之后是这样的
我们现在点击一下save按钮
3 信号 buttonClicked(QAbstractButton button)
当按钮被点击时触发这个信号
它可以传递出被点击的按钮对象
我们现在点击save按钮
4 文本交互
这两个函数涉及到一个变量 Qt.TextInteractionFlags,可选的值如下
- Qt.NoTextInteraction 不与文本进行交互
- Qt.TextSelectableByMouse 可被鼠标选中
- Qt.TextSelectableByKeyboard 可使用文本光标操作
- Qt.LinksAccessibleByMouse 可用鼠标激活链接
- Qt.LinksAccessibleByKeyboard 可用键盘激活链接
- Qt.TextEditable 文本可编辑
- Qt.TextEditorInteraction 可用用光标文本操作,可用鼠标选中,可编辑
- Qt.TextBrowserInteraction 可被鼠标选中,可用键盘或鼠标激活链接
这个在70.QLabel中1.9有讲过,在这里我们就举一个例子
我们首先设置一个主标题和副标题
我们此时点一下链接就可以打开链接
主要提示语没有办法交互
现在我们设置为文本可编辑
我们现在可以编辑主文本,但是不能编辑副文本
- 方法setTextInteractionFlags()只作用于主文本
现在我们获取一下
5 静态方法
5.1 QMessageBox.about()
参数如下所示
- 父对象
- 窗口标题
- 主标题
返回值为None
5.2 QMessageBox.aboutQt()
参数为:
- 父对象
- 窗口标题
这个是Qt的一个介绍,可以设置窗口标题
返回值为None
5.3 QMessageBox.critical()
参数为
- 父对象
- 窗口标题
- 主提示语
- 一个或多个标准按钮
- 默认按钮
返回值根据按下按钮的不同,返回不同的值
5.4 QMessageBox.information()
参数为
- 父对象
- 窗口标题
- 主提示语
- 一个或多个标准按钮
- 默认按钮
返回值根据按下按钮的不同,返回不同的值
5.5 QMessageBox.question()
参数为
- 父对象
- 窗口标题
- 主提示语
- 一个或多个标准按钮
- 默认按钮
返回值根据按下按钮的不同,返回不同的值
5.6 QMessageBox.warning()
参数为
- 父对象
- 窗口标题
- 主提示语
- 一个或多个标准按钮
- 默认按钮
返回值根据按下按钮的不同,返回不同的值
5.3-5.6中的返回值如下
- Abort = 262144
- Apply = 33554432
- Cancel = 4194304
- Close = 2097152
- Discard = 8388608
- Help = 16777216
- Ignore = 1048576
- No = 65536
- NoAll = 131072
- NoToAll = 131072
- Ok = 1024
- Open = 8192
- Reset = 67108864
- RestoreDefaults = 134217728
- Retry = 524288
- Save = 2048
- SaveAll = 4096
- Yes = 16384
- YesAll = 32768