PyQt5弹出窗口–QInputDialog, QMessageBox, QFileDialog

文章目录

  • 前言
  • 一、QInputDialog–弹出输入对话框
  • 1. 输入整数
  • 2. 输入小数
  • 3. 输入文本
  • 4. 输入多行文本
  • 5. 输入选项
  • 注意
  • 示例
  • 二、QMessageBox–弹出消息提示框
  • 1. 信息
  • 2. 问答
  • 3. 警告
  • 4. 危险
  • 5. 关于
  • 示例
  • 按钮类型
  • (1) 标准按钮类型
  • (2) 自定义按钮类型
  • 三、QFileDialog–弹出文件对话框
  • 1. 文件夹
  • 2. 单文件
  • 3. 多文件
  • 4. 保存
  • 5. 另存为
  • 示例

  • 前言

    PyQt5中弹出窗口最常用的三种:输入框、消息提示、文件夹对话框,下面详细介绍这三大类。

    一、QInputDialog–弹出输入对话框

    1. 输入整数

    # 后面四个数字的作用依次是 初始值 最小值 最大值 步幅
    value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
    

    效果:
    输入整数

    2. 输入小数

    # 后面四个数字的作用依次是 初始值 最小值 最大值 小数点后位数
    value, ok = QInputDialog.getDouble(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37.56, -10000, 10000, 2)
    

    效果:
    输入小数

    3. 输入文本

    # 第三个参数表示显示类型,可选,有正常(QLineEdit.Normal)、密碼( QLineEdit. Password)、不显示( QLineEdit. NoEcho)三种情况
    value, ok = QInputDialog.getText(self, "输入框标题", "这是提示信息\n\n请输入文本:", QLineEdit.Normal, "这是默认值")
    

    效果:
    输入文本

    4. 输入多行文本

    value, ok = QInputDialog.getMultiLineText(self, "输入框标题", "这是提示信息\n\n请输入地址:", "默认的\n我的地址是\n中国广东广州番禺")
    

    效果:
    输入多行文本

    5. 输入选项

    # 1为默认选中选项目,True/False 列表框是否可编辑。 
    items = ["Spring", "Summer", "Fall", "Winter"]
    value, ok = QInputDialog.getItem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, True)
    

    效果:
    输入选项
    输入选项

    注意

    输入后有两个选项,点击OK则代码中value为输入内容,ok为True;点击Cancel则value为空,ok为False。

    示例

    import sys
    from PyQt5.QtWidgets import *
    
    
    class MyWindow(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle('PyQt5 弹出窗口')
            self.resize(400, 300)
            # 加了self为全局布局,没加为局部布局
            h1 = QHBoxLayout(self)
            btn = QPushButton('弹出窗口')
            btn.clicked.connect(self.do_btn)
            h1.addWidget(btn)
    
        def do_btn(self, event):  # 输入:整数
            # 后面四个数字的作用依次是 初始值 最小值 最大值 步幅
            value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    

    效果:
    示例1
    点击弹出窗口按钮则弹出输入框,更换为其它输入框,更改do_btn函数中的语句即可。

    二、QMessageBox–弹出消息提示框

    1. 信息

    用来告诉用户关于提示信息

    # 后两项分别为按钮(以|隔开,共有7种按钮类型,见示例后)、默认按钮(省略则默认为第一个按钮)
    reply = QMessageBox.information(self, "消息框标题", "这是一条消息。", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
    

    效果:
    信息
    选择Yes代码中replay为16384,选择No则replay为65536,这里不知道为什么。。。下面几个也都是这样

    2. 问答

    用来告诉用户关于提问消息

    # 后两项分别为按钮(以|隔开,共有7种按钮类型,见示例后)、默认按钮(省略则默认为第一个按钮)
    reply = QMessageBox.question(self, "消息框标题", "这是一条问答吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
    

    效果:
    问答

    3. 警告

    用来告诉用户关于不寻常的错误消息

    # 后两项分别为按钮(以|隔开,共有7种按钮类型,见示例后)、默认按钮(省略则默认为第一个按钮)
    reply = QMessageBox.warning(self, "消息框标题", "这是一条警告!", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
    

    效果:
    警告

    4. 危险

    用来告诉用户关于严重的错误消息

    # 后两项分别为按钮(以|隔开,共有7种按钮类型,见示例后)、默认按钮(省略则默认为第一个按钮)
    reply = QMessageBox.critical(self, '标题', '严重错误对话框消息正文', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
    

    效果:
    危险

    5. 关于

    # 这里不需要插入按钮类型
    reply = QMessageBox.about(self, "消息框标题", "这是关于软件的说明。。。")
    

    效果:
    关于
    注意:这里代码中没有选项,点击OK,replay返回None

    示例

    import sys
    from PyQt5.QtWidgets import *
    
    
    class MyWindow(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle('PyQt5 弹出窗口')
            self.resize(400, 300)
            # 加了self为全局布局,没加为局部布局
            h1 = QHBoxLayout(self)
            btn = QPushButton('弹出窗口')
            btn.clicked.connect(self.do_btn)
            h1.addWidget(btn)
    
        def do_btn(self, event):  # 信息
            # 后两项分别为按钮(以|隔开)、默认按钮(省略则默认为第一个按钮)
            reply = QMessageBox.information(self, "消息框标题", "这是一条消息。", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    

    效果:
    示例2
    点击弹出窗口按钮则弹出消息框,更换为其它消息框,更改do_btn函数中的语句即可。
    上面几种就是消息框中图标有所不同,注意 QMessageBox.about (关于消息框) 后不需要选项。

    按钮类型

    (1) 标准按钮类型

    按钮类型
    共有七种标准按钮类型,可自行组合。

    (2) 自定义按钮类型

    import sys
    from PyQt5.QtWidgets import *
    
    
    class MyWindow(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle('PyQt5 弹出窗口')
            self.resize(400, 300)
            # 加了self为全局布局,没加为局部布局
            h1 = QHBoxLayout(self)
            btn = QPushButton('弹出窗口')
            btn.clicked.connect(self.do_btn)
            h1.addWidget(btn)
    
        def do_btn(self):
            # 创建Question消息框
            self.reply = QMessageBox(QMessageBox.Question, "消息框标题", "这是一条消息。")
            # 添加自定义按钮
            self.reply.addButton('确定', QMessageBox.YesRole)
            self.reply.addButton('取消', QMessageBox.NoRole)
            # 设置消息框中内容前面的图标
            # self.reply.setIcon(1)
            self.reply.show()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    

    注意!!!这里reply需赋值为窗口的对象属性 (即self.reply),否则窗口会一闪而过!!!
    效果:
    自定义

    三、QFileDialog–弹出文件对话框

    1. 文件夹

    dir_ = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")  # 起始路径
    

    弹出C盘目录,dir_ 返回选择的文件夹路径。

    2. 单文件

    # 设置文件扩展名过滤,注意用双分号间隔
    file_, filetype = QFileDialog.getOpenFileName(self, "选取文件", "C:/", "All Files (*);;Text Files (*.txt)")       
    

    file_ 返回选择的文件路径。

    3. 多文件

    files, ok = QFileDialog.getOpenFileNames(self, "多文件选择", "C:/", "All Files (*);;Text Files (*.txt)")
    

    按钮 Ctrl 可多选文件,files返回选择文件的路径。

    4. 保存

    file_, ok = QFileDialog.getSaveFileName(self, "文件保存", "C:/", "All Files (*);;Text Files (*.txt)")
    

    保存为txt类型,file_ 返回文件保存路径。

    5. 另存为

    file_, ok = QFileDialog.getSaveFileName(self, "文件另存为", "C:/", "All Files (*);;Text Files (*.txt)")
    

    保存为txt类型,file_ 返回文件保存路径。
    似乎跟 4. 保存 没什么区别。。。

    示例

    import sys
    from PyQt5.QtWidgets import *
    
    
    class MyWindow(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle('PyQt5 弹出窗口')
            self.resize(400, 300)
            # 加了self为全局布局,没加为局部布局
            h1 = QHBoxLayout(self)
            btn = QPushButton('弹出窗口')
            btn.clicked.connect(self.do_btn)
            h1.addWidget(btn)
    
        def do_btn(self, event):
            dir_ = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")  # 起始路径
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    

    点击 弹出窗口 弹出 起始路径,即可选择文件夹。

    来源:木南成长之路

    物联沃分享整理
    物联沃-IOTWORD物联网 » PyQt5弹出窗口–QInputDialog, QMessageBox, QFileDialog

    发表评论