本文主要介绍PyQt界面实现中常用的消息弹出对话框、提供用户输入的输入框、打开文件获取文件/目录路径的文件对话框。学习这三种控件前,先想一下它们使用的主要场景:

1、消息弹出对话框。程序遇到问题需要退出需要弹出错误提示框 、程序执行可能造成的风险需要弹出警告窗口提示用户是否进一步执行等等。
2、用户输入框。比如常见的让用户选择执行的程序分支、yes/no等等。
3、文件对话框。获取本地文件或者文件夹的完整路径甚至是直接打开文件显示文件内容。
本文主要针对这三种控件的主要场景进行介绍。
QMessageBox:弹出对话框控件
QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。弹出式对话框有很多类型,如提示、警告、错误、询问、关于等对话框。这些不同类型的QMessageBox对话框只是显示时图标不同,其他功能一样。
QMessageBox类中常用方法
information(QWdiget parent,title,text,buttons,defaultButton):弹出消息对话框。
question(QWidget parent,title,text,buttons,defaultButton):弹出问答对话框
warning(QWidget parent,title,text,buttons,defaultButton):弹出警告对话框
critical(QWidget parent,title,text,buttons,defaultButton):弹出严重错误对话框
about(QWidget parent,title,text):弹出关于对话
参数解释如下:
parent:指定的父窗口控件。
title:表示对话框标题。
text:表示对话框文本。
buttons:表示多个标准按钮,默认为ok按钮。
defaultButton表示默认选中的标准按钮,默认选中第一个标准按钮。
其他方法如下:
setTitle():设置标题
setText():设置正文消息
setIcon():设置弹出对话框的图片
QMessageBox的标准按钮类型
QMessage.Ok 同意操作、QMessage.Cancel 取消操作、QMessage.Yes 同意操作、QMessage.No 取消操作、QMessage.Abort 终止操作、QMessage.Retry 重试操作、QMessage.Ignore 忽略操作
5种常用的消息对话框及其显示效果
(1)消息对话框,用来告诉用户关于提示信息
QMessageBox.information(self, '信息提示对话框','前方右拐到达目的地',QMessageBox.Yes | QMessageBox.No)
(2)提问对话框,用来告诉用户关于提问消息。
QMessageBox.question(self, "提问对话框", "你要继续搞测试吗?", QMessageBox.Yes | QMessageBox.No)
(3)警告对话框,用来告诉用户关于不寻常的错误消息。
QMessageBox.warning(self, "警告对话框", "继续执行会导致系统重启,你确定要继续?", QMessageBox.Yes | QMessageBox.No)
(4)严重错误对话框,用来告诉用户关于严重的错误消息。
QMessageBox.critical(self, "严重错误对话框", "数组越界,程序异常退出", QMessageBox.Yes | QMessageBox.No)
(5)关于对话框
QMessageBox.about(self, "关于对话框", "你的Windows系统是DOS1.0")
上述程序完整代码如下:
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(431, 166)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(160, 50, 91, 41))
font = QtGui.QFont()
font.setFamily("YaHei Consolas Hybrid")
font.setPointSize(10)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "对话框"))
self.pushButton.setText(_translate("Form", "弹出对话框"))
class MyMainForm(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.showMsg)
def showMsg(self):
QMessageBox.information(self, '信息提示对话框','前方右拐到达目的地',QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
QMessageBox.question(self, "提问对话框", "你要继续搞测试吗?", QMessageBox.Yes | QMessageBox.No)
QMessageBox.warning(self, "警告对话框", "继续执行会导致系统重启,你确定要继续?", QMessageBox.Yes | QMessageBox.No)
QMessageBox.critical(self, "严重错误对话框", "数组越界,程序异常退出", QMessageBox.Yes | QMessageBox.No,)
QMessageBox.about(self, "关于对话框", "你的Windows系统是DOS1.0")
if __name__ == "__main__":
app = QApplication(sys.argv)
myWin = MyMainForm()
myWin.show()
sys.exit(app.exec_())