PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法


Posted in Python onAugust 06, 2019

本文主要介绍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)

PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

  (2)提问对话框,用来告诉用户关于提问消息。

  QMessageBox.question(self, "提问对话框", "你要继续搞测试吗?", QMessageBox.Yes | QMessageBox.No)

  PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

(3)警告对话框,用来告诉用户关于不寻常的错误消息。

  QMessageBox.warning(self, "警告对话框", "继续执行会导致系统重启,你确定要继续?", QMessageBox.Yes | QMessageBox.No)

 PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

(4)严重错误对话框,用来告诉用户关于严重的错误消息。

  QMessageBox.critical(self, "严重错误对话框", "数组越界,程序异常退出", QMessageBox.Yes | QMessageBox.No)

PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

 (5)关于对话框

  QMessageBox.about(self, "关于对话框", "你的Windows系统是DOS1.0")

PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法

上述程序完整代码如下:

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

QInputDialog标准对话框控件

  QInputDialog控件是一个标准对话框,用于获取用户输入信息,QInputDialog控件可以提供数字、字符串输入或提供下拉列表选择。

  针对QInputDialog对话框控件的使用,我们主要考虑2个问题:1、如何在弹出对话框供用户输入,2、如何获取用户输入。

  QInputDialog常用方法:

    getint():从控件中获得标准整数输入

    getDouble():从控件中获得标准浮点数输入

    getText():从控件中获得标准字符串的输入

    getItem() :从控件中获得列表里的选项输入

  说明:QInputDialog控件

完整代码如下:

# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox,QInputDialog
class Ui_Form(object):
  def setupUi(self, Form):
    Form.setObjectName("Form")
    Form.resize(382, 190)
    font = QtGui.QFont()
    font.setPointSize(9)
    font.setBold(False)
    font.setWeight(50)
    Form.setFont(font)
    self.GetIntlineEdit = QtWidgets.QLineEdit(Form)
    self.GetIntlineEdit.setGeometry(QtCore.QRect(150, 30, 150, 31))
    self.GetIntlineEdit.setText("")
    self.GetIntlineEdit.setObjectName("GetIntlineEdit")
    self.GetstrlineEdit = QtWidgets.QLineEdit(Form)
    self.GetstrlineEdit.setGeometry(QtCore.QRect(150, 80, 150, 31))
    self.GetstrlineEdit.setObjectName("GetstrlineEdit")
    self.GetItemlineEdit = QtWidgets.QLineEdit(Form)
    self.GetItemlineEdit.setGeometry(QtCore.QRect(150, 130, 150, 31))
    self.GetItemlineEdit.setObjectName("GetItemlineEdit")
    self.getIntButton = QtWidgets.QPushButton(Form)
    self.getIntButton.setGeometry(QtCore.QRect(50, 30, 80, 31))
    self.getIntButton.setObjectName("getIntButton")
    self.getStrButton = QtWidgets.QPushButton(Form)
    self.getStrButton.setGeometry(QtCore.QRect(50, 80, 80, 31))
    self.getStrButton.setObjectName("getStrButton")
    self.getItemButton = QtWidgets.QPushButton(Form)
    self.getItemButton.setGeometry(QtCore.QRect(50, 130, 80, 31))
    self.getItemButton.setObjectName("getItemButton")
    self.retranslateUi(Form)
    QtCore.QMetaObject.connectSlotsByName(Form)
  def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(_translate("Form", "QInputDialog例子"))
    self.getIntButton.setText(_translate("Form", "获取整数"))
    self.getStrButton.setText(_translate("Form", "获取字符串"))
    self.getItemButton.setText(_translate("Form", "获取列表选项"))
class MyMainForm(QMainWindow, Ui_Form):
  def __init__(self, parent=None):
    super(MyMainForm, self).__init__(parent)
    self.setupUi(self)
    self.getIntButton.clicked.connect(self.getInt)
    self.getStrButton.clicked.connect(self.getStr)
    self.getItemButton.clicked.connect(self.getItem)
  def getInt(self):
    num, ok = QInputDialog.getInt(self, 'Integer input dialog', '输入数字')
    if ok and num:
      self.GetIntlineEdit.setText(str(num))
  def getStr(self):
    text, ok=QInputDialog.getText(self, 'Text Input Dialog', '输入姓名:')
    if ok and text:
      self.GetstrlineEdit.setText(str(text))
  def getItem(self):
    items=('C', 'C++', 'C#', 'JAva', 'Python')
    item, ok=QInputDialog.getItem(self, "select input dialog", '语言列表', items, 0, False)
    if ok and item:
      self.GetItemlineEdit.setText(str(item))
if __name__ == "__main__":
  app = QApplication(sys.argv)
  myWin = MyMainForm()
  myWin.show()
  sys.exit(app.exec_())

关键代码介绍:

  QInputDialog.getInt(self, 'Integer input dialog', '输入数字') -> 输入整数对话框

  QInputDialog.getText(self, 'Text Input Dialog', '输入姓名:') -> 输入字符串对话框

  QInputDialog.getItem(self, "select input dialog", '语言列表', items, 0, False) -> 下拉列表选择对话框

QFileDialog文件对话框

  QFileDialog是用于打开和保存文件的标准对话框。使用QFileDialog控件主要考虑2个场景:使用该控件提供用户选择目录或文件,并保存选择目录或文件的路径。简单说就是实现类似word/Notepad++文件打开功能。如下

   针对上述场景,QFileDialog控件实现的主要方法:

    QFileDialog.getOpenFileName():获取单个文件路径

    QFileDialog.getOpenFileNames():获取多个文件路径

    QFileDialog.getExistingDirectory():获取文件夹路径

完整代码如下:

# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox,QInputDialog,QFileDialog
class Ui_Form(object):
  def setupUi(self, Form):
    Form.setObjectName("Form")
    Form.resize(443, 120)
    self.widget = QtWidgets.QWidget(Form)
    self.widget.setGeometry(QtCore.QRect(50, 40, 301, 25))
    self.widget.setObjectName("widget")
    self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
    self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
    self.horizontalLayout.setObjectName("horizontalLayout")
    self.openFileButton = QtWidgets.QPushButton(self.widget)
    self.openFileButton.setObjectName("openFileButton")
    self.horizontalLayout.addWidget(self.openFileButton)
    self.filePathlineEdit = QtWidgets.QLineEdit(self.widget)
    self.filePathlineEdit.setObjectName("filePathlineEdit")
    self.horizontalLayout.addWidget(self.filePathlineEdit)
    self.retranslateUi(Form)
    QtCore.QMetaObject.connectSlotsByName(Form)
  def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(_translate("Form", "QFileDialog打开文件例子"))
    self.openFileButton.setText(_translate("Form", "打开文件"))
class MyMainForm(QMainWindow, Ui_Form):
  def __init__(self, parent=None):
    super(MyMainForm, self).__init__(parent)
    self.setupUi(self)
    self.openFileButton.clicked.connect(self.openFile)
  def openFile(self):
    get_directory_path = QFileDialog.getExistingDirectory(self,
                  "选取指定文件夹",
                  "C:/")
    self.filePathlineEdit.setText(str(get_directory_path))
    get_filename_path, ok = QFileDialog.getOpenFileName(self,
                  "选取单个文件",
                  "C:/",
                  "All Files (*);;Text Files (*.txt)")
    if ok:
      self.filePathlineEdit.setText(str(get_filename_path))
    get_filenames_path, ok = QFileDialog.getOpenFileNames(self,
                  "选取多个文件",
                  "C:/",
                  "All Files (*);;Text Files (*.txt)")
    if ok:
      self.filePathlineEdit.setText(str(' '.join(get_filenames_path)))
if __name__ == "__main__":
  app = QApplication(sys.argv)
  myWin = MyMainForm()
  myWin.show()
  sys.exit(app.exec_())

 关键代码介绍

    QFileDialog.getOpenFileName(self,"选取单个文件","C:/","All Files (*);;Text Files (*.txt)") -> 获取单个指定文件的绝对路径

   getOpenFileName()参数说明:

   第1个参数:用于指定父组件

   第2个参数:对话框标题

   第3个参数:对话框显示时默认打开的目录。"."表示当前程序所在目录,“/”表示当前盘下的根目录。

    第4个参数:对话框中文件扩展名过滤器。All Files (*);;Text Files (*.txt)表示可以选择所有文件类型或者只显示.txt后缀的文件类型。

  QFileDialog.getExistingDirectory(self,"选取指定文件夹","C:/") -> 获取指定文件夹的绝对路径

  QFileDialog.getOpenFileNames(self,"选取多个文件","C:/","All Files (*);;Text Files (*.txt)") -> 获取多个指定文件的绝对路径

小结

  本文介绍了消息弹出对话框、用户输入对话框以及文件打开对话框的基本使用方法。内容覆盖了这三类控件的基本使用场景。可以开始动手尝试了。。

以上所述是小编给大家介绍的PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
零基础写python爬虫之urllib2使用指南
Nov 05 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python算法表示概念扫盲教程
Apr 13 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python函数式编程实例详解
Jan 17 Python
解决pytorch-yolov3 train 报错的问题
Feb 18 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
如何在Python项目中引入日志
May 31 Python
如何在Django配置文件里配置session链接
Aug 06 #Python
在django中,关于session的通用设置方法
Aug 06 #Python
Django 对象关系映射(ORM)源码详解
Aug 06 #Python
Django中使用session保持用户登陆连接的例子
Aug 06 #Python
Python中的self用法详解
Aug 06 #Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 #Python
Django 响应数据response的返回源码详解
Aug 06 #Python
You might like
php 随机排序广告的实现代码
2011/05/09 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
Python读取Excel的方法实例分析
2015/07/11 Python
Python全局变量用法实例分析
2016/07/19 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python代码太长换行的实现
2019/07/05 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
static关键字的用法
2013/10/07 面试题
行政文员岗位职责
2013/11/08 职场文书
教师对学生的评语
2014/04/28 职场文书
联谊活动总结
2014/08/28 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
客房服务员岗位职责
2015/02/09 职场文书
企业团队精神心得体会
2016/01/19 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
python计算列表元素与乘积详情
2022/08/05 Python