在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_())

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_())

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_())

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_())

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_())




