返回

PyQt5基本窗口控件(九)QDialog

发布时间:2023-01-10 00:19:41 526
# python# 信息

(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)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
PyQt5基本窗口控件(八)QSlider 2023-01-09 23:44:00