• PyQt5快速开发与实战 4.9 对话框类控件


    PyQt5快速开发与实战

    4. 第4章 PyQt5 基本窗口控件

    4.9 对话框类控件

    4.9.1 QDialog

    在PyQt 5中定义了一系列的标准对话框类,让使用者能够方便和快捷地通过各个类完成字号大小、字体颜色以及文件的选择等。

    QDialog类的子类主要有QMessageBox.QFileDialog,QFontDialog ,QInputDialog等。

    QDialog类中的常用方法

    方法描述
    setWindowTitle()设置对话框标题
    setWindowModality()设置窗口模态。取值如下:
    - Qt.NonModal,非模态,可以和程序的其他窗口交互;Qt.WindowModal,窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口进行交互;Qt.ApplicationModal,应用程序模态,阻止和任何其他窗口进行交互

    QDialog的使用

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    class DialogDemo(QMainWindow):
        def __init__(self,parent = None):
            super(DialogDemo, self).__init__(parent)
            self.setWindowTitle("Dialog案例")
            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__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = DialogDemo()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    4.9.2 QMessageBox

    QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十六进制数。

    QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他功能是一样的。

    QMessageBox类中的常用方法

    方法描述
    information(QWidget,parent,title,text,buttons,defaultButton)弹出消息对话框,各参数解释如下: parent,指定的父窗口控件;title,对话框标题text,对话框文本;buttons:多个标准按钮,默认为OK按钮;defaultButton:默认选中的标准按纽,默认是第一个标准按钮
    question(Qwidget parent,title, text, buttons, defaultButton)弹出问答对话框(各参数解释同上)
    waming(QWidget parent,title, text, buttons, defaultButton)弹出警告对话框(各参数解释同上)
    ctitical(QWidget parent,title, text, buttons , defaultButton)弹出严重错误对话框(各参数解释同上)
    about(QWidget parent,titIe, text)弹出关于对话框(各参数解释同上)
    setTitle()设置标题
    setText()设置消息正文
    setIcon()设置弹出对话框的图片

    QMessageBox的标准按钮类型

    类型描述
    QMessage.Ok同意操作
    QMessage.Cancel取消操作
    QMessage.Yes同意操作
    QMessage.No取消操作
    QMessage.About终止操作
    QMessage.Retry重试操作
    QMessage.Ignore忽略操作

    5种常用的消息对话框及其显示效果

    在这里插入图片描述

    QMessageBox使用案例

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    class MyWindow(QWidget):
        def __init__(self):
            super(MyWindow, self).__init__()
            self.setWindowTitle("QMessageBox案例")
            self.resize(300 ,100)
            self.myButton = QPushButton(self)
            self.myButton.setText("点击弹出消息框")
            self.myButton.clicked.connect(self.msg)
    
        def msg(self):
            # information
            reply = QMessageBox.information(self,"标题","消息正文",QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
            print(reply)
    
    if __name__ == '__main__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = MyWindow()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    4.9.3 QInputDialog

    QInputDialog 控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。当用户单击OK按钮或按 Enter 键后,在父窗口可以收集通过QInputDialog控件输入的信息。QInputDialog 控件是QDialog标准对话框的一部分。
    在 QInputDialog控件中可以输入数字、字符串或列表中的选项。标签用于提示必要的信息。

    QInputDialog类中的常用方法

    方法描述
    getInt()从控件中获得标准整数输入
    getDouble()从控件中获得标准浮点数输入
    getText()从控件中获得标准字符串输入
    getItem()从控件中获得列表中的选项输入

    QInputDialog的使用案例

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets 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("Input Dialog 案例")
    
        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__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = InputdialogDemo()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    在这里插入图片描述

    4.9.4 QFontDialog

    QFontDialog 控件是一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小、样式和格式。QFontDialog是 QDialog标准对话框的一部分。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小、样式和格式。

    QFontDialog的使用

    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("Choose font")
            self.fontButton.clicked.connect(self.getFont)
            layout.addWidget(self.fontButton)
            self.fontLineEdit = QLabel("Hello , 测试字体案例")
            layout.addWidget(self.fontLineEdit)
            self.setLayout(layout)
            self.setWindowTitle("Font Dialog案例")
    
        def getFont(self):
            font , ok = QFontDialog.getFont()
            if ok :
                self.fontLineEdit.setFont(font)
    
    
    if __name__ == '__main__':
        from pyqt5_plugins.examples.exampleqmlitem import QtCore
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = FontDialogDemo()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    4.9.5 QFileDialog

    QFileDialog是用于打开和保存文件的标准对话框。QFileDialog类继承自QDialog类。
    QFileDialog在打开文件时使用了文件过滤器,用于显示指定扩展名的文件。也可以设置使用OFileDialog打开文件时的起始目录和指定扩展名的文件。

    QFileDialog类中的常用方法

    方法描述
    getOpenFileName()返回用户所选择的文件的名称,并打开该文件
    getSaveFileName()使用用户选择的文件名并保存文件
    setFileMode()可以选择的文件类型,枚举常量是:
    QFileDialog.AnyFile,任何文件
    QFileDialog.ExistingFile,已存在的文件.
    QFileDialog.Directory,文件目录
    QFileDialog.ExistingFiles,已经存在的多个文件
    setFilter()设置过滤器, 只显示过滤器允许的文件类型

    QFileDialog的使用

    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)
          layout.addWidget(self.btn)
          self.le = QLabel("")
          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("File Dialog 例子")
    
       def getfile(self):
          fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'd:\\', "Image files (*.jpg *.gif)")
          self.le.setPixmap(QPixmap(fname))
    
       def getfiles(self):
          dlg = QFileDialog()
          dlg.setFileMode(QFileDialog.AnyFile)
          dlg.setFilter(QDir.Files)
    
          if dlg.exec_():
             filenames = dlg.selectedFiles()
             f = open(filenames[0], 'r',encoding='UTF-8')
    
             with f:
                data = f.read()
                self.contents.setText(data)
    
    if __name__ == '__main__':
        # from pyqt5_plugins.examples.exampleqmlitem import QtCore
        # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        win = filedialogdemo()
        win.show()
        sys.exit(app.exec_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?
    【文章学习系列之模型】Koopa
    CentOS 7 安装 Redis 7
    带您聚焦第十四届中国航展新看点
    Mocha MemoryBufferQueue 设计概述
    PHP程序员需要注意的代码规范PSR有哪些?
    设计模式之访问者模式
    np中的normalize/histogram/cumsum/interp函数
    Java Tomcat内存马——Servlet内存马
    Node.js基础知识、fs、path、http三大模块、nodejs的模块化、npm与包管理
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126020560