(五)对话框的使用
平时在使用各种软件或者网站时,经常会看到各种各样的对话框,有的对话框可以与用户进行交互,而有的只是显示一些提示信息。使用PyQt5设计的窗口程序,同样支持弹出对话框,在PyQt5中,常用的对话框有QMessageBox内置对话框、QFileDialog对话框、QInputDialog对话框、QFontDialog对话框和QColorDialog对话框。重点需要掌握的是QMessageBox对话框、QFileDialog文件对话框、QInputDialog输入对话框。
1. QMessageBox:对话框
我们平时使用软件时可以看到各种各样的对话框,例如,电脑管家的退出对话框如下:

1. 对话框的种类
在PyQt5中,对话框使用QMessageBox类表示,PyQt5内置5种不同类型的对话框,分别是消息对话框、问答对话框、警告对话框、错误对话框、关于对话框,他们主要的区别是弹出的对话框中的图标不同。
PyQt5内置的5种不同类型对话框
| 对话框类型 | 说明 |
|---|---|
| QMessageBox.information() | 消息对话框 |
| QMessageBox.question() | 问答对话框 |
| QMessageBox.warning() | 警告对话框 |
| QMessageBox.critical() | 错误对话框 |
| QMessageBox.about() | 关于对话框 |
2. 对话框的使用方法
PyQt5内置的5种不同类型对话框在使用时是类似的,以消息对话框为例。消息对话框使用QMessageBox.information()表示,语法如下:
QMessageBox.information(QWidget, "Title", "Content", buttons, defaultbutton)
QMessageBox.information()方法的参数说明
| 参数 | 说明 |
|---|---|
| QWidget | self或者窗口对象,表示该对话框所属的窗口。 |
| Title | 字符串,表示对话框的标题。 |
| Content | 字符串,表示对话框种的提示内容。 |
| buttons | 对话框上要添加的按钮,多个按钮之间用” |
| defaultbutton | 默认选中的按钮,该值可选,没有指定该值时,默认为第一个按钮。 |
对话框种的按钮种类
| 按钮种类 | 说明 |
|---|---|
| QMessageBox.Ok | 同意操作 |
| QMessageBox.Yes | 同意操作 |
| QMessageBox.No | 取消操作 |
| QMessageBox.Abort | 终止操作 |
| QMessageBox.Retry | 重试操作 |
| QMessageBox.Ignore | 忽略操作 |
| QMessageBox.Close | 关闭操作 |
| QMessageBox.Cancel | 取消操作 |
| QMessageBox.Open | 打开操作 |
| QMessageBox.Save | 保存操作 |
关于对话框QMessageBox.about()中不能指定按钮。语法如下:
QMessageBox.about(QWidget, "Title", "Content")
示例:弹出5种不同的对话框
打开Qt Designer设计器,新建一个窗口,在窗口中添加5个PushButton控件,并分别设置它们的文本为“消息框”、“警告框”、“问答框”、“错误框”、“关于框”,设计完成后保存为.ui文件,使用PyUIC工具将其转换为.py文件。在.py文件中,定义5个槽函数,分别使用QMessageBox类的不同方法弹出对话框。
关键代码如下:
# 为按钮控件的clicked信号绑定自定义槽函数
# 关联“消息框”按钮的方法
self.pushButton.clicked.connect(self.info)
# 关联“警告框”按钮的方法
self.pushButton_2.clicked.connect(self.warn)
# 关联“问答框”按钮的方法
self.pushButton_3.clicked.connect(self.question)
# 关联“错误框”按钮的方法
self.pushButton_4.clicked.connect(self.critical)
# 关联“关于框”按钮的方法
self.pushButton_5.clicked.connect(self.about)
# 自定义槽函数
def info(self): # 显示消息对话框
QMessageBox.information(None, "消息", "这是一个消息对话框", QMessageBox.Ok)
def warn(self): # 显示警告对话框
QMessageBox.warning(None, "警告", "这是一个警告对话框", QMessageBox.Ok)
def question(self): # 显示问答对话框
QMessageBox.question(None, "问答", "这是一个问答对话框", QMessageBox.Ok)
def critical(self): # 显示错误对话框
QMessageBox.critical(None, "错误", "这是一个错误对话框", QMessageBox.Ok)
def about(self): # 显示关于对话框
QMessageBox.about(None, "关于", "这是一个关于对话框")
完整代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(475, 95)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 30, 71, 28))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(110, 30, 71, 28))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(200, 30, 71, 28))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(290, 30, 71, 28))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(380, 30, 71, 28))
self.pushButton_5.setObjectName("pushButton_5")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# 为按钮控件的clicked信号绑定自定义槽函数
# 关联“消息框”按钮的方法
self.pushButton.clicked.connect(self.info)
# 关联“警告框”按钮的方法
self.pushButton_2.clicked.connect(self.warn)
# 关联“问答框”按钮的方法
self.pushButton_3.clicked.connect(self.question)
# 关联“错误框”按钮的方法
self.pushButton_4.clicked.connect(self.critical)
# 关联“关于框”按钮的方法
self.pushButton_5.clicked.connect(self.about)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "消息框"))
self.pushButton_2.setText(_translate("MainWindow", "警告框"))
self.pushButton_3.setText(_translate("MainWindow", "问答框"))
self.pushButton_4.setText(_translate("MainWindow", "错误框"))
self.pushButton_5.setText(_translate("MainWindow", "关于框"))
# 自定义槽函数
def info(self): # 显示消息对话框
QMessageBox.information(None, "消息", "这是一个消息对话框", QMessageBox.Ok)
def warn(self): # 显示警告对话框
QMessageBox.warning(None, "警告", "这是一个警告对话框", QMessageBox.Ok)
def question(self): # 显示问答对话框
QMessageBox.question(None, "问答", "这是一个问答对话框", QMessageBox.Ok)
def critical(self): # 显示错误对话框
QMessageBox.critical

最低0.47元/天 解锁文章
5764

被折叠的 条评论
为什么被折叠?



