PyQt5— 基本窗口控件之对话框类控件

对话框类控件

  • 基本窗口控件
    • 十、对话框类控件
      • 1、QDialog
      • 2、QMessageBox
      • 3、QInputDialog
      • 4、QFontDialog
      • 5、QFileDialog

基本窗口控件

十、对话框类控件

1、QDialog

  • PyQt5 中定义了一系列标准对话框类,用于快捷完成字号大小、颜色选择和文件选择等操作。
  • QDialog 类的子类主要有 QMessageBox、QFileDialog、QFontDialog、QInputDialog 等。
  • QDialog 类中的常用方法如下
    方法 描述
    setWindowTitle() 设置对话框标题
    setWindowModality() 设置窗口模态
  • 模态取值如下:
    意义
    Qt.NonModal 非模态,可以和程序的其他窗口交互
    Qt.WindowModal 窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口交互
    Qt.ApplicationModal 应用程序模态,阻止和任何其他窗口交互
  • 示例:
    # -*- coding:utf-8 -*-
    # Time : 2019/08/16 上午 10:52 
    # Author : 御承扬
    # e-mail:[email protected]
    # project:  PyQt5
    # File : qt20_Dialog.py 
    # @software: PyCharm
    
    
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    
    
    class DialogDemo(QMainWindow):
        def __init__(self, parent=None):
            super(DialogDemo, self).__init__(parent)
            self.setWindowTitle("Dialog 例子")
            self.setWindowIcon(QIcon("./images/Python2.ico"))
            self.resize(350, 300)
    
            self.btn = QPushButton(self)
            self.btn.setText("弹出对话框")
            self.btn.move(50, 50)
            self.btn.clicked.connect(self.showDialog)
    
        def showDialog(self):
            dialog = QDialog()
            btn = QPushButton("ok", dialog)
            btn.move(50, 50)
            dialog.setWindowTitle("Dialog")
            dialog.setWindowModality(Qt.ApplicationModal)
            dialog.exec_()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        demo = DialogDemo()
        demo.show()
        sys.exit(app.exec_())
    
  • 效果如下:
    PyQt5— 基本窗口控件之对话框类控件_第1张图片

2、QMessageBox

  • QMessageBox 是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。
  • QMessageBox 类提供了许多常用的弹出式对话框:提示、警告、错误、询问和关于等对话框。
  • QMessageBox 类中的常用方法如下表:
    方法 描述
    infomation(QWidget parent, title, text, buttons, defaultButton) 弹出消息对话框,各个参数意义如下:parent—父窗体,title—对话框标题,text—消息内容,buttons—多个标准按钮,默认为 OK 键,defaultButton—默认选中的标准按钮,默认为第一个按钮
    question(QWidget parent, title, text, buttons, defaultButton) 弹出问答对话框,参数意义同上
    warning(QWidget parent, title, text, buttons, defaultButton) 弹出警告对话框,参数意义同上
    ctitical(QWidget parent, title, text, buttons, defaultButton) 弹出严重错误对话框,参数意义同上
    about(QWidget parent, title, text, buttons, defaultButton) 弹出关于对话框
    setTitle() 设置标题
    setText() 设置消息正文
    setIcon() 设置弹出对话框的图片
  • QMessageBox 的标准按钮类型如下:
    类型 描述
    QMessageBox.OK 同意操作
    QMessageBox.Cancel 取消操作
    QMessageBox.Yes 同意操作
    QMessageBox.No 取消操作
    QMessageBox.Abort 终止操作
    QMessageBox.Retry 重试操作
    QMessageBox.Ignore 忽略操作
  • 示例
    # -*- coding:utf-8 -*-
    # Time : 2019/08/16 下午 3:22 
    # Author : 御承扬
    # e-mail:[email protected]
    # project:  PyQt5
    # File : qt21_QMessageBox.py 
    # @software: PyCharm
    
    
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    
    
    class MyWindow(QWidget):
        def __init__(self, parent=None):
            super(MyWindow, self).__init__()
            self.setWindowTitle("QMessageBox 例子")
            self.setWindowIcon(QIcon("./images/Python2.ico"))
            self.resize(300, 100)
            self.myButton = QPushButton(self)
            self.myButton.setText("点击弹出消息对话框")
            self.myButton.clicked.connect(self.msg)
    
        def msg(self):
            reply = QMessageBox.information(self, "标题", "消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
            print(reply)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    
  • 允许效果如下:
    PyQt5— 基本窗口控件之对话框类控件_第2张图片

3、QInputDialog

  • QInputDialog 控件是一个标准对话框,由一个文本框和两个按钮(OK 和 Cancel )组成。
  • 用户输入完按回车或 OK 按钮,父窗口便能收集到 QInputDialog 控件输入的消息。
  • 在 QInputDialog 控件可以输入数字、字符串或列表中的选项。
  • QInputDialog 类中常用方法如下表
    方法 描述
    getInt() 从控件中获得标准整数输入
    getDouble() 从控件中获得标准浮点数输入
    getText() 从控件中获得标准字符串输入
    getItem() 从控件中获得列表里的选项输入
  • 示例
    # -*- coding:utf-8 -*-
    # Time : 2019/08/16 下午 5:41 
    # Author : 御承扬
    # e-mail:[email protected]
    # project:  PyQt5
    # File : qt22_QInputDialog.py 
    # @software: PyCharm
    
    
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    
    
    class InputDialogDemo(QWidget):
        def __init__(self, parent=None):
            super(InputDialogDemo, self).__init__(parent)
            layout = QFormLayout()
            self.btn1 = QPushButton("获得列表里的选项")
            self.btn1.clicked.connect(self.getItem)
            self.le1 = QLineEdit()
            layout.addRow(self.btn1, self.le1)
    
            self.btn2 = QPushButton("获得字符串")
            self.btn2.clicked.connect(self.getText)
            self.le2 = QLineEdit()
            layout.addRow(self.btn2, self.le2)
    
            self.btn3 = QPushButton("获得整数")
            self.btn3.clicked.connect(self.getInt)
            self.le3 = QLineEdit()
            layout.addRow(self.btn3, self.le3)
            self.setLayout(layout)
            self.setWindowTitle("InputDialog 例子")
            self.setWindowIcon(QIcon("./images/Python2.ico"))
    
        def getItem(self):
            items = ("C", "C++", "Java", "Python")
            item, ok = QInputDialog.getItem(self, 'select input Dialog', "语言列表", items, 0, False)
            if ok and item:
                self.le1.setText(item)
    
        def getText(self):
            text, ok = QInputDialog.getText(self, 'Text input dialog', '输入姓名')
            if ok:
                self.le2.setText(str(text))
    
        def getInt(self):
            num, ok = QInputDialog.getInt(self, "integer input dialog", " 输入数字")
            if ok:
                self.le3.setText(str(num))
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = InputDialogDemo()
        win.show()
        sys.exit(app.exec_())
    
  • 运行如下:
    PyQt5— 基本窗口控件之对话框类控件_第3张图片
    PyQt5— 基本窗口控件之对话框类控件_第4张图片

4、QFontDialog

  • QFontDialog 是一个常用的字体选择对话框,可以让用户选择所显示的文本的字号大小、样式和格式。
  • 使用 QFontDialog 类的静态方法 getFont() 可以从字体选择对话框中选择文本的显示字号打下、样式和格式。
  • 示例
    # -*- coding:utf-8 -*-
    # Time : 2019/08/17 上午 10:38 
    # Author : 御承扬
    # e-mail:[email protected]
    # project:  PyQt5
    # File : qt23_FontDialogDemo.py 
    # @software: PyCharm
    
    
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    
    class FontDialogDemo(QWidget):
        def __init__(self, parent=None):
            super(FontDialogDemo, self).__init__(parent)
            layout = QVBoxLayout()
            self.fontButton = QPushButton("选择字体")
            self.fontButton.clicked.connect(self.GetFont)
            layout.addWidget(self.fontButton)
            self.label = QLabel("Hello,测试字体例子")
            layout.addWidget(self.label)
            self.setLayout(layout)
            self.setWindowTitle("FontDialog 例子")
            self.setWindowIcon(QIcon("./images/Python2.ico"))
    
        def GetFont(self):
            font, ok = QFontDialog.getFont()
            if ok:
                self.label.setFont(font)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = FontDialogDemo()
        win.show()
        sys.exit(app.exec_())
    
  • 效果如下:
    PyQt5— 基本窗口控件之对话框类控件_第5张图片
    PyQt5— 基本窗口控件之对话框类控件_第6张图片

5、QFileDialog

  • QFileDialog 是用于打开和保存文件的标准对话框。
  • QFileDialog 类的常用方法如下表:
    方法 描述
    getOpenFileName() 返回用户所选择的文件的名称,并打开该文件
    getSaveFileName() 使用用户选择的文件名并保存文件
    setFileModel() 设置可以选择的文件类型
    setFilter() 设置过滤器,只显示过滤器允许的文件类型
  • setFileModel 方法的可选参数有如下:
    描述
    QFileDialog.AnyFile 任何文件
    QFileDialog.ExistingFile 已存在的文件
    QFileDialog.Directory 文件目录
    QFileDialog.ExistingFiles 已存在的多个文件
  • 示例
    # -*- coding:utf-8 -*-
    # Time : 2019/08/17 下午 12:43 
    # Author : 御承扬
    # e-mail:[email protected]
    # project:  PyQt5
    # File : qt24_FileDialog.py 
    # @software: PyCharm
    
    
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    
    class fileDialogDemo(QWidget):
        def __init__(self, parent=None):
            super(fileDialogDemo, self).__init__(parent)
            layout = QVBoxLayout()
            self.btn = QPushButton("加载图片")
            self.btn.clicked.connect(self.GetFile)
            self.le = QLabel("")
            layout.addWidget(self.btn)
            layout.addWidget(self.le)
            self.btn1 = QPushButton("加载文本文件")
            self.btn1.clicked.connect(self.GetFiles)
            layout.addWidget(self.btn1)
            self.contents = QTextEdit()
            layout.addWidget(self.contents)
            self.setLayout(layout)
            self.setWindowTitle("FileDialog 例子")
            self.setWindowIcon(QIcon("./images/Python2.ico"))
    
        def GetFile(self):
            f_name, _ = QFileDialog.getOpenFileName(self, 'Open File', 'D:\\', "Image files(*.jpg *.gif)")
            self.le.setPixmap(QPixmap(f_name))
    
        def GetFiles(self):
            dlg = QFileDialog()
            dlg.setFileMode(QFileDialog.AnyFile)
            dlg.setFilter(QDir.Files)
    
            if dlg.exec_():
                filename = dlg.selectedFiles()
                f = open(filename[0], 'r')
    
                with f:
                    data = f.read()
                    self.contents.setText(data)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = fileDialogDemo()
        win.show()
        sys.exit(app.exec_())
    
  • 运行效果如下:
    PyQt5— 基本窗口控件之对话框类控件_第7张图片
    PyQt5— 基本窗口控件之对话框类控件_第8张图片

你可能感兴趣的:(PyQt5)