信息提示对话框QMessageBox
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EyIgP6LY-1685885802003)(https://gitcode.net/qq_40597070/pic_go/raw/master/202302122119044.png)]
QMessageBox类提供了一个模态对话框,用于通知用户或向用户询问问题并接收答案。
信息对话框QMessageBox 用于向用户提供一些信息,或者询问用户如何进行下一步作,信息对话框的界面如图所示,由文本(textinformativeText、detailedText)、图标和按钮3 部分构成,因此在建立信息对话框时,主要设置这 3部分的参数。
用QMessageBox类创建信息对话框的方法如下,设置对话框中的按钮icon和 button的取值见下面的内容
- icon 是对话框中的图标title是对话框的标题
- text是对话框中显示的文本buttons
- flags 设置窗口的类型使用默认值即可。
from PySide6.QtWidgets import QMessageBox
QMessageBox(icon: PySide6.QtWidgets.QMessageBox.Icon,title: str,text: str,buttons: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton),parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,flags: PySide6.QtCore.Qt.WindowType=Instance(Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint))-> None
QMessageBox(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None
信息提示对话框 QMessageBox 的说明
消息框显示一个主要文本以提醒用户注意情况,一个信息文本以进一步解释情况,以及一个可选的详细文本以在用户请求时提供更多数据。
消息框还可以显示用于接受用户响应的图标和标准按钮。
提供了使用QMessageBox的两个API,基于属性的API和静态函数。调用其中一个静态函数是更简单的方法,但它不如使用基于属性的API灵活,并且结果信息量也较小。建议使用基于属性的API。
基于属性的API
要使用基于属性的API,请构造QMessageBox的实例,设置所需的属性,然后调用exec()来显示消息。最简单的配置是只设置消息文本属性。
msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.exec()
用户必须单击"确定"按钮才能关闭消息框。GUI的其余部分将被阻止,直到消息框被取消。
一个比仅仅提醒用户事件更好的方法是询问用户该怎么办。
将标准按钮属性设置为要作为用户响应集的按钮集。按钮是通过使用位OR运算符组合StandardButtons中的值来指定的。按钮的显示顺序取决于平台。例如,在Windows上,"保存"显示在"取消"的左侧,而在macOS上,顺序相反。将其中一个标准按钮标记为默认按钮。
信息文本属性可用于添加额外的上下文,以帮助用户选择适当的操作。
msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.setInformativeText("Do you want to save your changes?")
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec()
exec()插槽返回所单击按钮的StandardButtons值。
if ret == QMessageBox.Save:
# Save was clicked
break
elif ret == QMessageBox.Discard:
# Don't Save was clicked
break
elif ret == QMessageBox.Cancel:
# Cancel was clicked
break
else:
# should never be reached
break
要向用户提供更多信息以帮助他们选择适当的操作,请设置详细的文本属性。根据平台的不同,详细文本可能需要用户单击"显示详细信息…"按钮才能显示。
单击"显示详细信息…"按钮将显示详细文本。
富文本和文本格式属性
detailed text属性始终被解释为纯文本。主文本和信息文本属性可以是纯文本或富格文本。这些字符串根据文本格式属性的设置进行解释。默认设置为自动文本。
请注意,对于某些包含XML元字符的纯文本字符串,自动富文本检测测试可能会失败,导致纯文本字符串被错误地解释为富文本。在这些罕见的情况下,请使用convertFromPlainText()将纯文本字符串转换为视觉上等效的富文本字符串,或者使用setTextFormat()显式设置文本格式属性。
严重性级别以及图标和像素映射属性
QMessageBox支持四种预定义的消息严重性级别或消息类型,它们实际上只在各自显示的预定义图标上有所不同。通过将图标属性设置为预定义图标之一,指定四种预定义消息类型之一。以下规则是指导原则:
标识 | 方法 | 描述 |
---|---|---|
Question | 用于在正常操作过程中提出问题。 | |
Information | 用于报告有关正常操作的信息。 | |
Warning | 用于报告非关键错误。 | |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvPEDb9S-1685885802011)(https://gitcode.net/qq_40597070/pic_go/raw/master/pictures/2023/04/27_13_39_1_202304271339514.png)] | Critical | 用于报告严重错误。 |
预定义的图标不是由QMessageBox定义的,而是由样式提供的。默认值为"无图标"。除此之外,所有情况下的消息框都是相同的。使用标准图标时,请使用表中推荐的图标,或使用平台的样式指南推荐的图标。如果没有一个标准图标适合您的消息框,您可以通过设置图标pixmap属性而不是设置图标属性来使用自定义图标。
总之,要设置图标,请对其中一个标准图标使用setIcon(),或对自定义图标使用setIconPixmap()。
静态函数API
使用静态函数API构建消息框虽然方便,但不如使用基于属性的API灵活,因为静态函数签名缺少用于设置信息文本和详细文本属性的参数。对此的一个解决方案是将title参数用作消息框的主要文本,将text参数用作消息盒的信息文本。由于这有一个明显的缺点,即使消息框的可读性降低,因此平台指南不建议这样做。Microsoft Windows用户界面指南建议使用应用程序名称作为窗口的标题,这意味着如果除了主文本之外还有信息文本,则必须将其连接到文本参数。
请注意,静态函数签名的按钮参数已经发生了变化,这些参数现在用于设置标准按钮和默认按钮。
静态函数可用于创建 information(),question(),warning(),and critical()消息框。
ret = QMessageBox.warning(self,tr("My Application"),()
tr("The document has been modified.\n"
"Do you want to save your changes?"),
QMessageBox.Save | QMessageBox.Discard
| QMessageBox.Cancel,
QMessageBox.Save)
标准对话框示例显示了如何使用QMessageBox和其他内置Qt对话框。
高级使用
如果标准按钮对于您的消息框不够灵活,您可以使用addButton()重载来添加自定义按钮,该重载使用文本和ButtonRole。QMessageBox使用按钮角色来确定屏幕上按钮的顺序(根据平台的不同而不同)。您可以在调用exec()之后测试clickedButton()的值。例如
msgBox = QMessageBox()
connectButton = msgBox.addButton(tr("Connect"),QMessageBox.ActionRole)
abortButton = msgBox.addButton(QMessageBox.Abort)
msgBox.exec()
if msgBox.clickedButton()== connectButton:
# connect
elif msgBox.clickedButton()== abortButton:
# abort
默认键和转义键
默认按钮(即按下Enter时激活的按钮)可以使用setDefaultButton()指定。如果未指定默认按钮,QMessageBox会尝试根据消息框中使用的按钮的按钮角色来查找默认按钮。
可以使用setEscapeButton()指定转义按钮(按下Esc时激活的按钮)。如果未指定转义按钮,QMessageBox会尝试使用以下规则找到一个:
- 如果只有一个按钮,则为按下Esc时激活的按钮。
- 如果有"取消"按钮,则该按钮是在按下Esc时激活的按钮。
- 如果只有一个按钮具有"拒绝"角色或"否"角色,则按下Esc时该按钮将被激活。
当无法使用这些规则确定转义按钮时,按Esc键无效。
信息提示对话框 QMessageBox 的属性
属性 | 描述 | 访问功能 |
---|---|---|
detailedText: str | 此属性保存要在详细信息区域中显示的文本。。 该文本将被解释为纯文本。 默认情况下,此属性包含一个空字符串。 | detailedText() setDetailedText(text) |
icon: Icon | 此属性包含消息框的图标。 可以使用以下值之一指定消息框的图标: NoIcon Question Information Warning Critical 默认值为NoIcon。 用于显示实际图标的像素图取决于当前的GUI样式。您也可以通过设置图标像素图属性为图标设置自定义像素图。 | icon() setIcon(arg__1) |
iconPixmap: PySide6.QtGui.QPixmap | 此属性保存当前图标。 消息框当前使用的图标。请注意,通常很难绘制一个在所有GUI样式中看起来都合适的像素图;您可能需要为每个平台提供不同的像素图。 默认情况下,此属性未定义。 | iconPixmap() setIconPixmap(pixmap) |
informativeText: str | 此属性包含为消息提供更全面描述的信息性文本。 信息性文本可以用于扩展文本(),为用户提供更多信息,例如描述情况的后果,或建议替代解决方案。 默认情况下,此属性包含一个空字符串。 | informativeText() setInformativeText(text) |
standardButtons: StandardButtons | 此属性在消息框中保存标准按钮的集合。 此属性控制消息框使用哪些标准按钮。 默认情况下,此属性不包含标准按钮。 | standardButtons() setStandardButtons(buttons) |
text: str | 此属性包含要显示的消息框文本。。 文本应该是一个描述情况的简短句子或短语,最好是作为一个中立的陈述或行动呼吁问题。 文本将被解释为纯文本或富文本,具体取决于文本格式设置(textFormat)。默认设置为"自动图文集",即消息框将尝试自动检测文本的格式。 此属性的默认值是一个空字符串。 | text() setText(text) |
textFormat: TextFormat | 此属性保留消息框显示的文本的格式。 消息框使用的当前文本格式。有关可能选项的说明,请参见TextFormat枚举。 默认格式为"AutoText"。 | textFormat() setTextFormat(format) |
textInteractionFlags: TextInteractionFlags | 指定消息框的标签应如何与用户输入交互。 默认值取决于样式。 | textInteractionFlags() setTextInteractionFlags(flags) |
信息提示对话框 QMessageBox 的常用方法
信息对话框 QMessageBox 的常用方法如表所示
QMessageBox的方法及参数类型 | 返回值的类型 | 说 明 |
---|---|---|
setText(str) | None | 设置信息对话框的文本 |
text() | str | 获取信息对话框的文本 |
setInformativeText(str) | None | 设置对话框的信息文本 |
informativeText() | str | 获取信息文本 |
setDetailedText sr) | None | 设置对话框的详细文本 |
detailedText() | str | 获取详细文本 |
setTextFormat(QL.TextFormat) | None | 设置文本的格式,是纯文本还是富文本 |
seIcon(QMessageBox.Icon) | None | 设置标准图标 |
setIconPixmap(QPixmap) | None | 设置自定义图标 |
icon(QMessageBox.Icon) | QMessageBox.Icon | 获取标准图标的图像 |
iconPixmap() | QPixmap | 获取图标的图像 |
setCheckBox(QCheckBox) | None | 信息对话框中添加QCheckBox控件 |
checkBox() | QCheckBox | 获取QCheckBox控件 |
addButton(button:QAbstractButton,role: QMessageBox.ButtonRole) | None | 对话框中添加按钮,并设置按钮的作用 |
addButton(button:PySide6.QtWidgets.QMessageBox.StandardButton) | PySide6.QtWidgets.QPushButton | 这是一个重载函数。 将标准按钮添加到消息框(如果这样做是有效的),并返回按钮。标准按钮有固定的角色(作 用) StandardButton枚举值见下方 |
addButton(text: str,QMessageBox.ButtonRole) | PySide6.QtWidgets.QPushButton | 这是一个重载函数。 创建带有给定文本的按钮,将其添加到指定角色的消息框中,并返回该按钮。返回新建的按钮 |
addButton(button:PySide6.QtWidgets.QAbstractButton,role:QMessageBox.ButtonRole) | PySide6.QtWidgets.QPushButton | 将给定按钮添加到具有指定角色的消息框中。 ButtonRole枚举值见下方介绍 |
buttons() | List[QAbstractButtonJ | 获取对话框中按钮列表 |
button(QMessageBox StandardButton) | QAbstractButton | 获取对话框中标准按钮 |
buttonText(button:int) | Str | 获取按钮上的文本 |
removeButton(QAbstractButton) | None | 移除按钮 |
buttonRole(button: QAbstractButton) | QMessageBox ButtonRole | 返回指定按钮的按钮角色。如果button为None或未添加到消息框,则此函数返回InvalidRole。 |
setDefaultButton(QPushButton) | None | 设置默认按钮 |
setDefaultButton(QMessageBox.StandardButton) | None | 将某标准按钮设置成默认按钮 |
defaultButton() | QPushButton | 获取默认按钮 |
setEscapeButton(QAbstractButton) | None | 设置按 Esc键对应的按钮 |
setEscapeButton(QMessageBox.StandardButton) | None | 将某标准按钮设置成 Esc键对应的按钮 |
escapeButton() | QAbstractButton | 获取Esc键对应的按钮 |
clickedButton() | QAbstractButton | 获取被单击的按钮 |
[static]about(QWidget,title: str,text: str) | None | 构建"关于"对话框 parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 |
Lstatic]information(parameters) | QMessageBox.StandardButton 或 int | 静态函数,快速构建消息对话框,并返回被 单击的按钮 parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 buttons:多个标准按钮,默认为ok按钮 defaultButton:默认选中的标准按钮,默认是第一个标准按钮 |
[static]question(parameters) | QMessageBox.StandardButton 或 int | 静态函数,快速构建消息对话框,并返回被 单击的按钮 parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 buttons:多个标准按钮,默认为ok按钮 defaultButton:默认选中的标准按钮,默认是第一个标准按钮 |
[static]warning(parameters) | QMessageBox.StandardButton 或 int | 静态函数,快速构建消息对话框,并返回被 单击的按钮 parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 buttons:多个标准按钮,默认为ok按钮 defaultButton:默认选中的标准按钮,默认是第一个标准按钮 |
[static]critical(parameters) | QMessageBox.StandardButton 或 int | 静态函数,快速构建消息对话框,并返回被 单击的按钮 parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 buttons:多个标准按钮,默认为ok按钮 defaultButton:默认选中的标准按钮,默认是第一个标准按钮 |
信息对话框 QMessageBox主要方法介绍如下
-
信息对话框的创建方法有两种
- 一种是先创建信息对话框的实例对象,然后往实例对象中添加文本、图标和按钮,最后用show()open()或 exec()方法把信息对话框显示出来
- 另一种是用QMessageBox 提供的静态函数来创建信息对话框
-
信息对话框上显示的文本分为 text、informativeText 和 detailedText
- 如果设置detailedText,会出现"Show Details…"按钮
- 3个文本分别用setText(str)、setInformativeText(str)和 setDetailedText(str)方法设置。
- detailedText 文本只能以纯文本形式显示,text 和 informativeText 文本可以用纯文本或富文本的形式易示
- 用setTextFormat(Qt.TextFormat)方法设置是用纯文本还是富文本显示其中参数 Qt.TextFormat 可以取:
- Qt.PlainText(纯文本)
- Qt.RichText(富文本)
- Qt.Autotext(由系统决定)
- Qt.MarkdownText(Markdown 文本)。
- 如果设置detailedText,会出现"Show Details…"按钮
-
信息对话框的图标可以由用户自己定义,也可以使用QMessageBox 提供的标准图标。
-
自定义图标需要用setIconPixmap(QPixmap)方法定义,标准图标用setIcon(QMessageBox.Icon)方法设置,其中 QMessageBox.Icon 可以取以下值,这几种图标的样式如上面开头介绍图所示
PySide6.QtWidgets.QMessageBox.Icon 此枚举具有以下值:
Constant Description QMessageBox.NoIcon 消息框中没有任何图标。 QMessageBox.Question 指示消息正在询问问题的图标。 QMessageBox.Information 信息图标,指示该消息没有什么异常。 QMessageBox.Warning 警告图标,表示该消息是一个警告,但可以处理。 QMessageBox.Critical 严重警告图标,指示该消息表示严重问题的图标。
-
-
信息对话框的按钮分为自定义按钮和标准按钮,不论哪种按钮都要赋予角色,按钮的角色用来说明按钮的作用。按钮的角色由枚举类型QMessageBox.ButtonRole确定,PySide6.QtWidgets.QMessageBox.ButtonRole可以取的值如下表所示:
此枚举描述可用于描述按钮框中的按钮的角色。这些角色的组合是用来描述其行为的不同方面的标志。
QMessageBox.ButtonRole的取值 值 说 明 QMessageBox.InvalidRole -1 不起作用的按钮 QMessageBox.AcceptRole 0 接受对话框内的信息,例如OK按钮 QMessageBox.RejectRole 1 拒绝对话框内的信息,例如Cancel按钮 QMessageBox.DestructiveRole 2 重构对话框 QMessageBox.ActionRole 3 使对话框内的控件产生变化 QMessageBox.HelpRole 4 显示帮助的按钮 QMessageBox.YesRole 5 Yes 按钮 QMessageBox.NoRole 6 No按钮 QMessageBox.ResetRole 7 重置按钮,恢复对话框的默认值 QMessageBox ApplyRole 8 确认当前的设置,例如Apply 按钮 -
在信息对话框中添加的按钮可以是自定义的按钮,也可以是标准按钮。
-
用addButton(button:QAbstractButton,role: QMessageBox.ButtonRole)方法方法自定义按钮,将一个已经存在的按钮加人到对话框中,
-
或者用addButton(text:str,QMessageBox.ButtonRole)方法自定义按钮,创建名称是 text 的按钮,同时返回该按钮;
-
用addButton(PySide6.QtWidgets.QMessageBox.StandardButton)方法可以添加标准按钮,并返回按钮添加按钮后可以为按钮设置槽函数。标准按钮已经有角色,参数 PySide6.QtWidgets.QMessageBox.StandardButton 用于设置标准按钮,标准按钮与其对应的角色如表所示:
-
(继承enum.IntFlag)这些枚举描述标准按钮的标志。每个按钮都有一个定义的按钮角色。
| 标准按钮 | 标准按钮的角色 | 描述 |
| --------------------------- | --------------- | -------------------------------- |
| 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.SaveAIl | AcceptRole | 全部保存按钮 |
| QMessageBox.Yes | YesRole | 是按钮 |
| QMessageBox.YesToAll | YesRole | 全部同意按钮 |
| QMessageBox.No | NoRole | 否按钮 |
| QMessageBox.notoAll | NoRole | 全部拒绝按钮 |
| QMessageBox.Abort | RejectRole | 终止按钮 |
| QMessageBox.Retry | AcceptRole | 重试按钮 |
| QMessageBox.Ignore | AcceptRole | 忽略按钮 |
| QMessageBox.NoButton | | 无效的按钮 |
以下值已过时:
- QMessageBox.YesAll
- QMessageBox.NoAll
- QMessageBox.Default
- QMessageBox.Escape
- QMessageBox.FlagMask
- QMessageBox.ButtonMask
-
用removeButton(QAbstractButton)方法可以移除按钮。信息对话框中也可添加QCheckBox 控件,方法是 setCheckBox(QCheckBox)
-
默认按钮是按 Enter 键时执行动作的按钮
- 默认按用stDefaultButton(QPushButton)方法或 setDefaultButton(PySide6.QtWidgets.QMessageBox.StandardButton)方法设置
- 若未指定,则根据按钮的角色来确定默认按钮。
- Esc 按钮是按 Esc 键时执行动作的按钮
- Esc按钮用setEscapeButton(QAbstractButton)方法或 setEscapeButton(PySide6.QtWidgets.QMessageBox.StandardButton)方法设置。
- 如果没有设置 Esc 按钮,则将角色是CancelRole的按钮作为 Esc 按钮,如果只有一个按钮则将这个按作为 Esc按钮。
- Esc 按钮是按 Esc 键时执行动作的按钮
-
对话框上被单击的按钮可以用clickedButton()方法获得也可通过信号buttonClicked(QAbstractButton)获得,单击按钮后发送该信号,并传递被单击的按钮。
-
可以用静态函数快速构建信息对话框,这些静态函数的格式如下。除 about()函数外,其他函数返回值是被单击的按钮或按钮的角色识别号。
about(parent: PySide6.QtWidgets.QWidget,title: str,text: str)-> None critical(parent: PySide6.QtWidgets.QWidget,title: str,text: str,button0: PySide6.QtWidgets.QMessageBox.StandardButton,button1: PySide6.QtWidgets.QMessageBox.StandardButton)-> int critical(parent: PySide6.QtWidgets.QWidget,title: str,text: str,buttons: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.Ok),defaultButton: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton))-> PySide6.QtWidgets.QMessageBox.StandardButton information(parent: PySide6.QtWidgets.QWidget,title: str,text: str,button0: PySide6.QtWidgets.QMessageBox.StandardButton,button1: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton))-> PySide6.QtWidgets.QMessageBox.StandardButton information(parent: PySide6.QtWidgets.QWidget,title: str,text: str,buttons: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.Ok),defaultButton: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton))-> PySide6.QtWidgets.QMessageBox.StandardButton question(parent: PySide6.QtWidgets.QWidget,title: str,text: str,button0: PySide6.QtWidgets.QMessageBox.StandardButton,button1: PySide6.QtWidgets.QMessageBox.StandardButton)-> int question(parent: PySide6.QtWidgets.QWidget,title: str,text: str,buttons: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)),defaultButton: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton))-> PySide6.QtWidgets.QMessageBox.StandardButton warning(parent: PySide6.QtWidgets.QWidget,title: str,text: str,button0: PySide6.QtWidgets.QMessageBox.StandardButton,button1: PySide6.QtWidgets.QMessageBox.StandardButton)-> int warning(parent: PySide6.QtWidgets.QWidget,title: str,text: str,buttons: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.Ok),defaultButton: PySide6.QtWidgets.QMessageBox.StandardButton=Instance(QMessageBox.StandardButton.NoButton))-> PySide6.QtWidgets.QMessageBox.StandardButton parameters参数可选如下: parent:指定父窗口 title:对话框标题 text:对话框文本 buttons:多个标准按钮,默认为ok按钮 defaultButton:默认选中的标准按钮,默认是第一个标准按钮
注意:使用以下静态方法时,不要在对话框执行期间删除parent。如果您想这样做,您应该使用QMessageBox构造函数之一自己创建对话框。
方法 描述 about(parent:PySide6.QtWidgets.QWidget,title:str,text:str) 显示带有标题title和文本text的简单about框。about框的父级是parent。About()在四个位置查找合适的图标 aboutQt(parent:PySide6.QtWidgets.QWidget[,title:str=“”]) 显示一个关于Qt的简单消息框,带有给定的标题,居中于parent(如果parent不是None)。该消息包括应用程序正在使用的Qt的版本号。
这对于包含在应用程序的帮助菜单中很有用,如菜单示例所示。
QApplication将此功能作为插槽提供。
在macOS上,"关于"框会弹出一个非模态窗口;在其他平台上,它目前是应用程序模式。critical(parent:PySide6.QtWidgets.QWidget,title:str,text:str[,buttons:QMessageBox.StandardButton=QMessageBox.StandardButton.Ok[,defaultButton:QMessageBox.StandardButton=QMessageBox.StandardButton.NoButton]])–>StandardButton 在指定的父小部件前面打开具有给定标题和文本的关键消息框。
将标准按钮添加到消息框中。
defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。
如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。 返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。 消息框是一个应用程序模式对话框。critical(parent:PySide6.QtWidgets.QWidget,title:str,text:str,button0:QMessageBox.StandardButton,button1:QMessageBox.StandardButton)–>int 在指定的父小部件前面打开具有给定标题和文本的关键消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。information(parent:PySide6.QtWidgets.QWidget,title:str,text:str[,buttons=QMessageBox.StandardButton.Ok[,defaultButton=QMessageBox.StandardButton.NoButton]])->QMessageBox.StandardButton 在指定的父小部件前面打开具有给定标题和文本的信息消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。information(parent,title:str,text:str,button0[,button1=QMessageBox.StandardButton.NoButton])->QMessageBox.StandardButton 在指定的父小部件前面打开具有给定标题和文本的信息消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。`question(parent,title:str,text:str[,buttons=QMessageBox.StandardButtons(QMessageBox.StandardButton.Yes QMessageBox.StandardButton.No)[,defaultButton=QMessageBox.StandardButton.NoButton]])` question(parent,title:str,text:str,button0:QMessageBox.StandardButton,button1:QMessageBox.StandardButton)->int 在指定的父小部件前面打开具有给定标题和文本的问题消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。standardIcon(icon:PySide6.QtWidgets.QMessageBox.Icon)->PySide6.QtGui.QPixmap 该函数不建议使用。
返回用于标准图标的像素图。这允许在更复杂的消息框中使用像素图。图标表示需要的图标,如问题、信息、警告或紧急。
使用SP_MessageBoxInformation等调用standardIcon()。warning(parent,title,text[,buttons=QMessageBox.StandardButton.Ok[,defaultButton=QMessageBox.StandardButton.NoButton]])->QMessageBox.StandardButton 在指定的父小部件前面打开带有给定标题和文本的警告消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。warning(parent,title,text,button0,button1)->QMessageBox.StandardButton 在指定的父小部件前面打开带有给定标题和文本的警告消息框。
将标准按钮添加到消息框中。defaultButton指定按Enter键时使用的按钮。defaultButton必须引用在buttons中给出的按钮。如果defaultButton为NoButton,QMessageBox会自动选择一个合适的默认值。
返回所单击的标准按钮的标识。如果按下Esc键,则返回escape按钮。
消息框是一个应用程序模式对话框。 -
自定义对话框,如果标准的消息框无法满足需求,则可以自定义消息框。
-
使用setText()函数可以设置消息框文本。
-
使用setlnformativeText()函数可以设置更多信息,主要用来补充text()函数的内容,向用户提供更多信息。
-
使用setStandardButtons()函数可以添加标准的按钮控件,标准按钮信息请参考上面的表格。
-
使用 setDetailedText()函数可以设置详细信息区域要显示的纯文本信息,默认是空字符串
-
使用setIcon()函数可以添加消息框的标准图标,默认无图,支持的参数见上面
- 使用setlconPixmap()函数可以设置一个自定义的图标,适用于标准图标不能满足需求的情况。
-
使用 addButton()函数可以添加自定义按钮,适用于标准按钮不能满足需求的情况。
-
信息提示对话框QMessageBox 的信号
信息对话框 QMessageBox 只有一个按钮,在对话框中单击任意按钮时发送buttonClicked(button:QAbstractButton)信号,参数是被单击的按钮。
信息提示对话框QMessageBox例子
实例化创建
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/14 22:48
# File_name: 03-QMessage控件使用介绍.py
"""
以下例子包含:
- 普通消息框
- 自定义消息框
- 信号与槽消息框
"""
import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
class WinForm(QMainWindow):
def __init__(self):
super(WinForm,self).__init__()
self.setWindowTitle("QMessage 例子")
self.resize(300,100)
layout = QVBoxLayout()
self.setLayout(layout)
self.label = QLabel('显示消息框信息')
layout.addWidget(self.label)
button1 = QPushButton()
button1.setText("普通消息框")
layout.addWidget(button1)
button1.clicked.connect(self.showMessageBox1)
button2 = QPushButton()
button2.setText("自定义消息框")
layout.addWidget(button2)
button2.clicked.connect(self.showMessageBox2)
button3 = QPushButton()
button3.setText("信号与槽")
layout.addWidget(button3)
button3.clicked.connect(self.showMessageBox3)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def showMessageBox1(self):
reply = QMessageBox.information(self,"标题","对话框消息正文",
QMessageBox.Yes | QMessageBox.No | QMessageBox.Ok | QMessageBox.Apply,
QMessageBox.Yes)
self.label.setText('返回%s'% reply)
def showMessageBox2(self):
msgBox = QMessageBox()
msgBox.setWindowTitle('自定义消息框-标题')
msgBox.setText("自定义消息框-内容")
msgBox.setInformativeText("自定义消息框-informationText")
msgBox.setDetailedText("显示详细文本信息,用来显示更多的文本信息")
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
msgBox.setIcon(QMessageBox.Information)
# 自定义按钮
button1 = QPushButton('MyOk')
msgBox.addButton(button1,QMessageBox.ApplyRole)
reply = msgBox.exec()
self.label.setText('返回:%s'% reply)
if msgBox.clickedButton()== button1:
self.label.setText(self.label.text()+'你点击了自定义按钮:'+ button1.text())
def showMessageBox3(self):
msgBox = QMessageBox()
msgBox.setWindowTitle('信号与槽-Title')
msgBox.setText("点击相应按钮,会触发对应信号")
msgBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel | QMessageBox.No)
msgBox.setDefaultButton(QMessageBox.Save)
msgBox.setIcon(QMessageBox.Information)
# 自定义按钮
button1 = QPushButton('MyOk-ApplyRole')
msgBox.addButton(button1,QMessageBox.ApplyRole)
button2 = QPushButton('MyOk-AcceptRole')
msgBox.addButton(button2,QMessageBox.AcceptRole)
# 信号与槽
msgBox.accepted.connect(lambda: self.statusBar().showMessage('触发了accepted信号',1000))
msgBox.rejected.connect(lambda: self.statusBar().showMessage('触发了rejected信号',1000))
reply = msgBox.exec()
self.label.setText('返回:%s'% reply)
if msgBox.clickedButton()in [button1,button2]:
self.label.setText(self.label.text()+'你点击了自定义按钮:'+ msgBox.clickedButton().text())
if __name__ =='__main__':
app = QApplication(sys.argv)
demo = WinForm()
demo.show()
sys.exit(app.exec())
静态方法创建
# -*- coding: UTF-8 -*-
# File date: Hi_2023/4/14 0:39
# File_name: 04-静态方法创建消息框.py
import sys
from PySide6.QtWidgets import QApplication,QWidget,QVBoxLayout,QPushButton,QMessageBox,QLabel
from random import choice
class MyWindow(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.resize(300,300)# 设置窗口大小
self.setWindowTitle("hello world")# 设置窗口标题
self.setupUI()
def setupUI(self):
self.h = QVBoxLayout(self)
btn_about = QPushButton("about")
btn_aboutQt = QPushButton("aboutQt")
btn_critical1 = QPushButton("critical1")
btn_critical2 = QPushButton("critical2")
btn_information1 = QPushButton("information1")
btn_information2 = QPushButton("information2")
btn_question1 = QPushButton("question1")
btn_question2 = QPushButton("question2")
btn_standardIcon = QPushButton("standardIcon")
btn_warning1 = QPushButton("warning1")
btn_warning2 = QPushButton("warning2")
btn_about.clicked.connect(self.btn_about_clicked)
btn_aboutQt.clicked.connect(self.btn_aboutQt_clicked)
btn_critical1.clicked.connect(self.btn_critical1_clicked)
btn_critical2.clicked.connect(self.btn_critical2_clicked)
btn_information1.clicked.connect(self.btn_information1_clicked)
btn_information2.clicked.connect(self.btn_information2_clicked)
btn_question1.clicked.connect(self.btn_question1_clicked)
btn_question2.clicked.connect(self.btn_question2_clicked)
btn_standardIcon.clicked.connect(self.btn_standardIcon_clicked)
btn_warning2.clicked.connect(self.btn_warning1_clicked)
btn_warning1.clicked.connect(self.btn_warning2_clicked)
self.h.addWidget(btn_about)
self.h.addWidget(btn_aboutQt)
self.h.addWidget(btn_critical1)
self.h.addWidget(btn_critical2)
self.h.addWidget(btn_information1)
self.h.addWidget(btn_information2)
self.h.addWidget(btn_question1)
self.h.addWidget(btn_question2)
self.h.addWidget(btn_standardIcon)
self.h.addWidget(btn_warning1)
self.h.addWidget(btn_warning2)
def btn_about_clicked(self):
QMessageBox.about(self,"about","这是about信息提示")
def btn_aboutQt_clicked(self):
QMessageBox.aboutQt(self,"这是about信息提示")
def btn_critical1_clicked(self):
QMessageBox.critical(self,"警告标题","这是critical警告信息提示")
def btn_critical2_clicked(self):
QMessageBox.critical(self,"警告标题","这是critical警告信息提示",QMessageBox.StandardButton.Ok,QMessageBox.StandardButton.No)
def btn_information1_clicked(self):
QMessageBox.information(self,"标题","这是信息提示框",QMessageBox.StandardButton.Ok,QMessageBox.StandardButton.No)
def btn_information2_clicked(self):
QMessageBox.information(self,"标题","这是信息提示框")
def btn_question1_clicked(self):
QMessageBox.question(self,"标题","这是问题提示框")
def btn_question2_clicked(self):
QMessageBox.question(self,"标题","这是问题提示框",QMessageBox.StandardButton.Ok,QMessageBox.StandardButton.Apply)
def btn_standardIcon_clicked(self):
random_icon = [QMessageBox.Icon.NoIcon,
QMessageBox.Icon.Warning,
QMessageBox.Icon.Information,
QMessageBox.Icon.Critical,
QMessageBox.Icon.Question]
standardIcon_QPixmap = QMessageBox.standardIcon(choice(random_icon))
label = QLabel(self)
self.h.addWidget(label)
label.setPixmap(standardIcon_QPixmap)
def btn_warning1_clicked(self):
QMessageBox.warning(self,"警告标题","这是警告提示框自定义按钮",QMessageBox.StandardButton.Ok,QMessageBox.StandardButton.Apply)
def btn_warning2_clicked(self):
QMessageBox.warning(self,"警告标题","这是警告提示框默认按钮")
if __name__ =='__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec())