PyQt5——对话框类控件

对话框类控件

QDialog

QDialog 类的子类主要有QMEssageBox、QFileDialog、QFontDialog、QInputDialog等

常用的方法

  • setWindowTitle() 设置对话框的标题
  • setWindowModality() 设置窗口模态
    • Qt.NonModal 非模态,可以和程序的其他窗口交互
    • Qt.WindowModal 窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口进行交互
    • Qt.ApplicationModel 应用程序模态, 阻止和任何其他窗口进行交互
# -*- coding: utf-8 -*-

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__':
    app = QApplication(sys.argv)
    demo = DialogDemo()
    demo.show()
    sys.exit(app.exec_())

PyQt5——对话框类控件_第1张图片

Dialog窗口的WindowModality属性决定是否为模态或非模态,当用户按下ESC键时,对话框窗口将会默认调用QDialog.reject()方法,然后关闭窗口。

QMessageBox

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

QMessageBox类提供了很多常用的弹出式对话框,如提示、警告、错误、查询、关于等对话框。

常用的方法

  • information(QWidge parent, title, text, buttons, defaultButton)
    • parent 指定的父窗口控件
    • title 对话框标题
    • text 对话框文本
    • buttons 多个标准按钮,默认为ok
    • defaultButton 默认中的标准按钮
  • question 弹出问答对话框
  • warning 弹出警告对话框
  • ctitical 弹出严重错误对话框
  • about 弹出关于对话框
  • setTitle() 设置标题
  • setText() 设置消息正文
  • setIcon() 设置弹出对话框的图片

QMessageBox的标准按钮

  • QMessage.Ok 同意操作
  • QMessage.Cancel 取消操作
  • QMessage.Yes 同意操作
  • QMessage.No 取消操作
  • QMessage.Abort 终止操作
  • QMessage.Retry 重试操作
  • QMessage.Ignore 忽略操作
# -*- coding: utf-8 -*-


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):
        reply = QMessageBox.information(self,"标题","消息文本",QMessageBox
                                        .Yes|QMessageBox.No, QMessageBox.Yes)

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

PyQt5——对话框类控件_第2张图片

QInputDialog

QInputDialog 控件是一个标准对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成,当用户点击OK按钮或按Enter键后,父窗口可以通过收集QInputDialog控件输入的信息。

在QInputDialog控件中可以输入数字、字符、字符串或列表中的选项。

常用的方法

  • getInt() 从控件中获取标准整数的输入
  • getDouble() 从控件中获得标准浮点数的输入
  • getText()从控件中获得标准字符串输入
  • getItem() 从控件中获得列表的选项输入
# -*- coding: utf-8 -*-

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__':
    app = QApplication(sys.argv)
    demo = InputdialogDemo()
    demo.show()
    sys.exit(app.exec_())

PyQt5——对话框类控件_第3张图片

QFontDialog

QFontDialog 控件是一个常用的字体选择对话框,可以一个用户选择所显示的字号文本、样式和格式。

# -*- coding: utf-8 -*-


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__':
    app = QApplication(sys.argv)
    demo = FontDialogDemo()
    demo.show()
    sys.exit(app.exec_())

PyQt5——对话框类控件_第4张图片

QFileDialog

QFileDialog 是用于打开和保存文本的标准对话框。

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

常用方法

  • getOpenFileName() 返回用户所选择文件的名称,并打开该文件
  • getSabeFileName() 使用用户选择的文件名并保存文件
  • setFileMode()
    • QFileDialog.AnyFile 任何文件
    • QFileDialog.ExistingFile 已存在的文件
    • QFileDialog.Directory 文件目录
    • QFileDialog.ExistingFiles 已经存在的多个文件
  • setFilter() 设置过滤器,只显示过滤器允许的文件类型
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class filedialogdmeo(QWidget):
    def __init__(self, parent=None):
        super(filedialogdmeo, self).__init__(parent)
        layout = QVBoxLayout()
        self.btn = QPushButton("加载图片")
        self.btn.clicked.connect(self.getfille)
        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 Didalog 例子")

    def getfille(self):
        fname,_= QFileDialog.getOpenFileName(self,"Open file","c:\\","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)
    ex = filedialogdmeo()
    ex.show()
    sys.exit(app.exec_())

PyQt5——对话框类控件_第5张图片

在打开文件的时候,需要指定文件编码的类型,不然可能无法打开文件。

你可能感兴趣的:(Python)