13-窗口、窗口控件、对话框以及相关功能类- 信息提示对话框QMessageBox

信息提示对话框QMessageBox

image-20230212211905913 image-20230212211920486 image-20230212211927403 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EyIgP6LY-1685885802003)(https://gitcode.net/qq_40597070/pic_go/raw/master/202302122119044.png)] image-20230212211957507

QMessageBox类提供了一个模态对话框,用于通知用户或向用户询问问题并接收答案。

信息对话框QMessageBox 用于向用户提供一些信息,或者询问用户如何进行下一步作,信息对话框的界面如图所示,由文本(textinformativeText、detailedText)、图标和按钮3 部分构成,因此在建立信息对话框时,主要设置这 3部分的参数。

image-20230218194355584

用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的其余部分将被阻止,直到消息框被取消。

../../_images/msgbox1.png

一个比仅仅提醒用户事件更好的方法是询问用户该怎么办。
将标准按钮属性设置为要作为用户响应集的按钮集。按钮是通过使用位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()

../../_images/msgbox2.png

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

要向用户提供更多信息以帮助他们选择适当的操作,请设置详细的文本属性。根据平台的不同,详细文本可能需要用户单击"显示详细信息…"按钮才能显示。

../../_images/msgbox3.png

单击"显示详细信息…"按钮将显示详细文本。

../../_images/msgbox4.png

富文本和文本格式属性

detailed text属性始终被解释为纯文本。主文本和信息文本属性可以是纯文本或富格文本。这些字符串根据文本格式属性的设置进行解释。默认设置为自动文本。
请注意,对于某些包含XML元字符的纯文本字符串,自动富文本检测测试可能会失败,导致纯文本字符串被错误地解释为富文本。在这些罕见的情况下,请使用convertFromPlainText()将纯文本字符串转换为视觉上等效的富文本字符串,或者使用setTextFormat()显式设置文本格式属性。

严重性级别以及图标和像素映射属性

QMessageBox支持四种预定义的消息严重性级别或消息类型,它们实际上只在各自显示的预定义图标上有所不同。通过将图标属性设置为预定义图标之一,指定四种预定义消息类型之一。以下规则是指导原则:

标识方法描述
../../_images/qmessagebox-quest.pngQuestion用于在正常操作过程中提出问题。
../../_images/qmessagebox-info.pngInformation用于报告有关正常操作的信息。
../../_images/qmessagebox-warn.pngWarning用于报告非关键错误。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 文本)。
  • 信息对话框的图标可以由用户自己定义,也可以使用QMessageBox 提供的标准图标。

    • 自定义图标需要用setIconPixmap(QPixmap)方法定义,标准图标用setIcon(QMessageBox.Icon)方法设置,其中 QMessageBox.Icon 可以取以下值,这几种图标的样式如上面开头介绍图所示

      PySide6.QtWidgets.QMessageBox.Icon 此枚举具有以下值:

      ConstantDescription
      QMessageBox.NoIcon消息框中没有任何图标。
      QMessageBox.Question指示消息正在询问问题的图标。
      QMessageBox.Information信息图标,指示该消息没有什么异常。
      QMessageBox.Warning警告图标,表示该消息是一个警告,但可以处理。
      QMessageBox.Critical严重警告图标,指示该消息表示严重问题的图标。
  • 信息对话框的按钮分为自定义按钮和标准按钮,不论哪种按钮都要赋予角色,按钮的角色用来说明按钮的作用。按钮的角色由枚举类型QMessageBox.ButtonRole确定,PySide6.QtWidgets.QMessageBox.ButtonRole可以取的值如下表所示:

    此枚举描述可用于描述按钮框中的按钮的角色。这些角色的组合是用来描述其行为的不同方面的标志。

    QMessageBox.ButtonRole的取值说 明
    QMessageBox.InvalidRole-1不起作用的按钮
    QMessageBox.AcceptRole0接受对话框内的信息,例如OK按钮
    QMessageBox.RejectRole1拒绝对话框内的信息,例如Cancel按钮
    QMessageBox.DestructiveRole2重构对话框
    QMessageBox.ActionRole3使对话框内的控件产生变化
    QMessageBox.HelpRole4显示帮助的按钮
    QMessageBox.YesRole5Yes 按钮
    QMessageBox.NoRole6No按钮
    QMessageBox.ResetRole7重置按钮,恢复对话框的默认值
    QMessageBox ApplyRole8确认当前的设置,例如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按钮。
  • 对话框上被单击的按钮可以用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.YesQMessageBox.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例子
实例化创建

image-20230414011503972

# -*- 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())

静态方法创建

image-20230414011424191

# -*- 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())

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值