PyQt5基本窗口控件(九)QDialog

九、对话框类控件

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

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

  • QDialog类中的常用方法

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

1、QDialog

案例二十 QDialog的使用
# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/9 0009 14:10
    # @Author:晚秋拾叶
    # @File:qt04_Dialog.py
    # @PyCharm之Python
"""
import sys
from PyQt5.QtCore 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__':
    app = QApplication(sys.argv)
    win = DialogDemo()
    win.show()
    sys.exit(app.exec_())

  • 代码分析

    • 在这个例子中,单击“弹出对话框”会弹出一个小对话框,程序是安排一个clicked信号连接到槽函数showdialog()完成。

      self.btn.clicked.connect(self.showdialog)
      
    • Dialog窗口的WindowModality属性是窗口模态,本程序内的其他窗口也能操作。按下Esc键时,对话框默认调用QDialog.resize()方法,然后关闭小对话框。

      dialog.setWindowModality(Qt.WindowModal)
      
  • 效果如图
    在这里插入图片描述
    在这里插入图片描述

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)弹出问答对话框(各参数解释同上)
warning(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.information(self,“标题”, “消息对话框正文”, QMessageBox.Yes |QMessageBox.No, QMessageBox.Yes)在这里插入图片描述
消息对话框,用来告诉用户关于提示消息QMessageBox.information(self,“标题”, “提问框消息正文”, QMessageBox.Yes |QMessageBox.No, QMessageBox.Yes)在这里插入图片描述
消息对话框,用来告诉用户关于提示消息QMessageBox.information(self,“标题”, “警告框消息正文”, QMessageBox.Yes |QMessageBox.No, QMessageBox.Yes)在这里插入图片描述
消息对话框,用来告诉用户关于提示消息QMessageBox.information(self,“标题”, “严重错误对话框正文”, QMessageBox.Yes |QMessageBox.No, QMessageBox.Yes)在这里插入图片描述
关于对话框QMessageBox.about(self,“标题”,“关于对话框”)在这里插入图片描述
案例二十一 QMessageBox的使用
import sys
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__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())
  • 效果如图
    在这里插入图片描述

3、QInputDialog

  • QInputDialog 控件是一个标准对话框,由一个文本框和两个按钮(OK 按钮和Cancel 按钮)组成。当用户单击OK按钮或按 Enter 键后,在父窗口可以收集通过QInputDialog控件输入的信息。QInputDialog 控件是QDialog标准对话框的一部分。
  • 在 QInputDialog控件中可以输入数字、字符串或列表中的选项。标签用于提示必要的信息。
  • QInputDialog类中的常用方法
方法描述
getInt()从控件中获得标准整数输入
getDouble()从控件中获得标准浮点数输入
getText()从控件中获得标准字符串输入
getItem()从控件中获得列表中的选项输入
案例二十二 QInputDialog的使用
# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/9 0009 16:18
    # @Author:晚秋拾叶
    # @File:qt04_QInputDialog.py
    # @PyCharm之Python
"""
import sys
from PyQt5.QtWidgets import *


class InputDialogDemo(QWidget):
    def __init__(self):
        super().__init__()

        FLayout = QFormLayout()
        self.btn1 = QPushButton("获得列表中的选项")
        self.btn1.clicked.connect(self.getItem)
        self.le1 = QLineEdit()
        FLayout.addRow(self.btn1, self.le1)

        self.btn2 = QPushButton("获得字符串")
        self.btn2.clicked.connect(self.getText)
        self.le2 = QLineEdit()
        FLayout.addRow(self.btn2, self.le2)

        self.btn3 = QPushButton("获得整数")
        self.btn3.clicked.connect(self.getInt)
        self.le3 = QLineEdit()
        FLayout.addRow(self.btn3, self.le3)
        self.setLayout(FLayout)
        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__':
    app = QApplication(sys.argv)
    win = InputDialogDemo()
    win.show()
    sys.exit(app.exec_())

  • 代码分析

    • 这个例子中,在QFormLayout布局器中放置了三个按钮和三个文本框。

    • 当单击各个按钮时,将弹出标准对话框,再把按钮的单击信号与自定义的槽函数连接起来。

      self.btn1.clicked.connect(self.getItem)
      self.btn2.clicked.connect(self.getText)
      self.btn3.clicked.connect(self.getInt)
      
    • 三个按钮的槽函数都是对话框控件,分别调用getItem()、getText()和getInt()三种方法,获得想要的内容,写入到三个按钮右边的QLineEdit()文本框中。

  • 效果如图

获得列表获得字符串获得整数
下拉列表框在这里插入图片描述在这里插入图片描述

4、QFontDialog

  • QFontDialog 控件是一个常用的字体选择对话框,可以让用户选择所显示文本的字号大小、样式和格式。QFontDialog是 QDialog标准对话框的一部分。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小、样式和格式。
案例二十三 QFontDialog的使用
# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/9 0009 17:12
    # @Author:晚秋拾叶
    # @File:qt04_FontDialog.py
    # @PyCharm之Python
"""
import sys
from PyQt5.QtWidgets import *


class FontDialogDemo(QWidget):
    def __init__(self, parent=None):
        super(FontDialogDemo, self).__init__(parent)
        self.resize(500, 300)

        # 定义垂直布局器
        VBlayout = QVBoxLayout()
        self.fontButton = QPushButton("Choose font")
        # 发射信号,调用字体设置器
        self.fontButton.clicked.connect(self.getFont)
        VBlayout.addWidget(self.fontButton)

        # 定义标签,以便接收字体设置
        self.fontLineEdit = QLabel("Hello , 测试字体案例")
        VBlayout.addWidget(self.fontLineEdit)
        self.setLayout(VBlayout)
        self.setWindowTitle("Font Dialog案例")

    # 定义槽函数调用字体设置对话框
    def getFont(self):
        font, ok = QFontDialog.getFont()
        if ok:
            self.fontLineEdit.setFont(font)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = FontDialogDemo()
    win.show()
    sys.exit(app.exec_())

  
  • 代码分析

    • 在这个例子中,通过字体选择对话框选择相应的字体font,并且所选择的字体的效果显示在QLineEdit的文本上

    • 实例化fontButton和fontLineEdit对象,并将fontButton的clicked信号和槽函数getFont()绑定在一起。

    • 创建QVBoxLayout垂直布局,再把组件放入布局器,单击fontButton按钮时,clicked发送信号给getFont()槽函数,接着槽函数内部,再把fontLineEdit对象里面的字体设置为槽函数里面QfontDialog类产生的字体效果。

      self.fontButton = QPushButton("Choose font")
      self.fontButton.clicked.connect(self.getFont)
      self.fontLineEdit = QLabel("Hello , 测试字体案例")
      	
      def getFont(self):
          font, ok = QFontDialog.getFont()
          if ok:
              self.fontLineEdit.setFont(font)
      
  • 效果如图
    在这里插入图片描述

5、QFileDialog

  • QFileDialog是用于打开和保存文件的标准对话框。QFileDialog类继承自QDialog类。

  • QFileDialog在打开文件时使用了文件过滤器,用于显示指定扩展名的文件。也可以设置使用OFileDialog打开文件时的起始目录和指定扩展名的文件。

  • QFileDialog类中的常用方法

方法描   述
getOpenFileName()返回用户所选择的文件的名称,并打开该文件
getSaveFileName()使用用户选择的文件名并保存文件
setFileMode()可以选择的文件类型,枚举常量是:
QFileDialog.AnyFile任何文件
QFileDialog.Directory文件目录
QFileDialog.ExistingFile已存在的文件
QFileDialog.ExistingFiles已经存在的多个文件
setFileter()设置过滤器, 只显示过滤器允许的文件类型
案例二十四 QFileDialog的使用
# -*- coding:utf-8 -*-
"""
    # @Time:2022/12/9 0009 18:12
    # @Author:晚秋拾叶
    # @File:qt04_QFileDialog.py
    # @PyCharm之Python
"""
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)

        # 定义一个垂直布局
        VBlayout = QVBoxLayout()
        self.btn = QPushButton("加载图片")
        self.btn.clicked.connect(self.getfile)
        VBlayout.addWidget(self.btn)

        # 定义一个文本标签
        self.le = QLabel("")
        VBlayout.addWidget(self.le)

        # 定义一个按钮
        self.btn1 = QPushButton("加载文本文件")
        self.btn1.clicked.connect(self.getfiles)
        VBlayout.addWidget(self.btn1)

        # 定义一个多行文本框
        self.contents = QTextEdit()
        VBlayout.addWidget(self.contents)

        self.setLayout(VBlayout)
        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__':
    app = QApplication(sys.argv)
    win = FileDialogDemo()
    win.show()
    sys.exit(app.exec_())

  • 代码分析
    • 在这个例子中,通过文件对话框选择文件,其中第一个文件对话框只允许打开图片文件,并把所加载的图片显示在标签(QLabel)中;第二个文件对话框只允许打开文件,并把文本内容显示在文本框(QTextEdit)内。
    • 第一个按钮使用QFileDialog.getOpenFileName(),调用文件对话框来显示图像,并显示在一个标签控件中。它只负责打开C盘目录下的文件。其核心代码如下:
      def getfile(self):
      	fName, _ = QFileDialog.getOpenFileName(self, 'Open file', 'd:\\', "Image files (*.jpg *.gif)")
      	self.le.setPixmap(QPixmap(fName))        
      
    • 在QFileDialog.getOpenFileName()函数中:
      • 第一个参数用于指定父组类;
      • 第二个参数是QFileDialog对话框的标题;
      • 第三个参数是对话框显示时默认打开的目录;
      • 第四个参数是对话框中文件扩展名过滤器(Filte)。
    • 第二个按钮使用文件对话框(QFileDialog)对象的exec_()方法来选择文件,并把选择文件的内容显示在文本编辑框控件中。其核心代码是:
          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)
      
  • 效果如图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朝兮暮兮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值