Python PyQt5 QMessageBox 教程

文章目录

  • 前言
  • 导入必要的模块
  • 基本用法
  • 显示信息框
  • 显示警告框
  • 显示错误框
  • 显示询问框
  • 显示关于框
  • 自定义QMessageBox
  • 自定义按钮和图标
  • 完整示例
  • 前言

    在PyQt5中,QMessageBox是一个常用的对话框类,用于向用户显示信息、警告、询问、错误等消息,并允许用户通过点击按钮来响应。本教程将详细介绍QMessageBox的基本用法,并提供丰富的案例示例。

    导入必要的模块

    首先,我们需要从PyQt5.QtWidgets模块中导入QMessageBox和其他可能用到的控件。

    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMessageBox
    

    基本用法

    显示信息框

    QMessageBox.information()用于显示信息性消息。

    def show_information():
        QMessageBox.information(None, "信息", "这是一条信息消息!")
    

    显示警告框

    QMessageBox.warning()用于显示警告消息。

    def show_warning():
        QMessageBox.warning(None, "警告", "这是一条警告消息!")
    

    显示错误框

    QMessageBox.critical()用于显示严重错误消息。

    def show_critical():
        QMessageBox.critical(None, "错误", "这是一个严重错误!")
    

    显示询问框

    QMessageBox.question()用于询问用户并获取其响应。

    def show_question():
        reply = QMessageBox.question(None, "询问", "您确定要执行此操作吗?",
                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            print("用户选择了是")
        else:
            print("用户选择了否")
    

    显示关于框

    QMessageBox.about()用于显示关于对话框,通常用于显示程序的版权、版本等信息。

    def show_about():
        QMessageBox.about(None, "关于", "这是一个关于对话框的示例。")
    

    自定义QMessageBox

    除了使用上述静态方法外,还可以创建QMessageBox的实例来自定义对话框。

    自定义按钮和图标

    def custom_message_box():
        msgBox = QMessageBox()
        msgBox.setWindowTitle("自定义对话框")
        msgBox.setText("这是一个自定义的消息框。")
        msgBox.setIcon(QMessageBox.Information)
        
        # 添加自定义按钮
        yesButton = msgBox.addButton('是', QMessageBox.YesRole)
        noButton = msgBox.addButton('否', QMessageBox.NoRole)
        
        # 设置默认按钮
        msgBox.setDefaultButton(yesButton)
        
        # 执行对话框并获取用户点击的按钮
        if msgBox.exec_() == msgBox.clickedButton():
            print("用户点击了自定义的按钮")
    

    完整示例

    下面是一个包含所有上述方法的完整示例。

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMessageBox
    
    class DemoWindow(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('QMessageBox 示例')
    
            layout = QVBoxLayout()
    
            info_btn = QPushButton('显示信息', self)
            info_btn.clicked.connect(self.show_information)
    
            warning_btn = QPushButton('显示警告', self)
            warning_btn.clicked.connect(self.show_warning)
    
            critical_btn = QPushButton('显示错误', self)
            critical_btn.clicked.connect(self.show_critical)
    
            question_btn = QPushButton('询问用户', self)
            question_btn.clicked.connect(self.show_question)
    
            about_btn = QPushButton('关于', self)
            about_btn.clicked.connect(self.show_about)
    
            custom_btn = QPushButton('自定义对话框', self)
            custom_btn.clicked.connect(self.custom_message_box)
    
            layout.addWidget(info_btn)
            layout.addWidget(warning_btn)
            layout.addWidget(critical_btn)
            layout.addWidget(question_btn)
            layout.addWidget(about_btn)
            layout.addWidget(custom_btn)
    
            self.setLayout(layout)
    
        def show_information(self):
            QMessageBox.information(self, "信息", "这是一条信息消息!")
    
        def show_warning(self):
            QMessageBox.warning(self, "警告", "这是一条警告消息!")
    
        def show_critical(self):
            QMessageBox.critical(self, "错误", "这是一个严重错误!")
    
        def show_question(self):
            reply = QMessageBox.question(self, "询问", "您确定要执行此操作吗?",
                                         QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                print("用户选择了是")
            else:
                print("用户选择了否")
    
        def show_about(self):
            QMessageBox.about(self, "关于", "这是一个关于对话框的示例。")
    
        def custom_message_box(self):
            msgBox = QMessageBox()
            msgBox.setWindowTitle("自定义对话框")
            msgBox.setText("这是一个自定义的消息框。")
            msgBox.setIcon(QMessageBox.Information)
    
            yesButton = msgBox.addButton('是', QMessageBox.YesRole)
            noButton = msgBox.addButton('否', QMessageBox.NoRole)
    
            msgBox.setDefaultButton(yesButton)
    
            if msgBox.exec_() == msgBox.clickedButton():
                print("用户点击了自定义的按钮")
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = DemoWindow()
        ex.show()
        sys.exit(app.exec_())
    

    这个示例程序创建了一个包含多个按钮的窗口,每个按钮都连接到一个槽函数,这些槽函数使用QMessageBox的不同方法来显示不同类型的对话框。此外,还展示了如何创建自定义的QMessageBox对话框。

    作者:蜡笔小新星

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python PyQt5 QMessageBox 教程

    发表回复