六、pyqt5对话框——QInputDialog、QColorDialog、QFontDialog、QMessageBox、QFileDialog
目录:
一、对话框综合示例
二、QDialog
三、QInputDialog
四、QMessageDialog
五、QFileDialog
pyqt5的对话框有多种类型,比如输入对话框(QInputDialog)、颜色对话框(QColorDialog)、字体对话框(QFontDialog)、消息对话框(QMessageBox)、文件对话框(QFileDialog)等,他们都是Dialog的子类。
对话框的使用可以提高人机交互,方便用户输入数据,修改参数,改变设置,选择文件等。
一、对话框综合示例
下面,我们通过一个小例子初步了解各类对话框。首先需要说明下,所有的对话框默认为模态窗口,即用户必须处理完当前对话框之后,才可以与父窗口交互。
import sys,os
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QWidget,QHBoxLayout,QPushButton,QTextEdit,QFontDialog, QApplication,
QColorDialog,QInputDialog,QVBoxLayout,QFileDialog,QMessageBox) path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI() def initUI(self):
self.setWindowTitle('对话框示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,500,400) '''创建三个按键,一个多行文本框'''
btn_input = QPushButton('输入')
btn_font = QPushButton('字体')
btn_color = QPushButton('颜色')
btn_file = QPushButton('文件')
self.text = QTextEdit() '''将三个按键布置在用一个水平布局容器中,然后将水平布局视为一个整体,与文本框布置在垂直布局中'''
hbx = QHBoxLayout()
hbx.addWidget(btn_input)
hbx.addWidget(btn_font)
hbx.addWidget(btn_color)
hbx.addWidget(btn_file) vbx = QVBoxLayout()
vbx.addLayout(hbx)
vbx.addWidget(self.text) self.setLayout(vbx) btn_input.clicked.connect(self.inputDialog)
btn_font.clicked.connect(self.fontDialog)
btn_color.clicked.connect(self.colorDialog)
btn_file.clicked.connect(self.fileDialog) def inputDialog(self):
text,ok = QInputDialog.getText(self,'输入文本框','请输入您的文本内容')
#返回值是一个包含两个元素的元组
if ok:
self.text.setText(text) def fontDialog(self):
font, ok = QFontDialog.getFont() #返回值是一个包含两个元素的元组
if ok:
self.text.setFont(font) def colorDialog(self):
color = QColorDialog.getColor()
if color.isValid: #通过isValid()可以判断用户选择的颜色是否有效,若用户选择取消,isValid()将返回false
self.text.setTextColor(color) def fileDialog(self):
'''打开单个文件'''
fname, _ = QFileDialog.getOpenFileName(self, '打开', '/home','Text Files (*.txt)')
# 返回值是包含2个元素的元组,但这里只需要第一个;这里还加了一个过滤器,只打开txt文件
if fname:
f = open(fname, 'r')
with f:
data = f.read()
self.text.setText(data) def closeEvent(self, QCloseEvent):
reply = QMessageBox.question(self,'消息框','您确认退出吗',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
if reply:
QCloseEvent.accept()
else:
QCloseEvent.ignore() if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
对话框示例
效果图如下:
窗体上共有5个控件:4个按键,1个文本框。
def inputDialog(self):
text,ok = QInputDialog.getText(self,'输入文本框','请输入您的文本内容')
if ok:
self.text.setText(text)
(1) “输入”按键连接了inputDialog方法,当用户点击该按键时,会弹出输入文本框。输入文本框可以限制用户输入的内容。例如限制输入字符串,限制用户输入证书,或者限制用户只能从有限内容中选择。当前示例中用户输入的是字符串。其他几种类型后续会详细介绍。当然,用户也可以不通过该输入框直接在文本框内输入内容,这里只是为了做展示,所以“多此一举”。效果如如下:
(2)当用户点击“字体”按键时,可以从字体对话框中选择字体大小,样式和格式。效果图如下:
(3)当用户点击“颜色”对话框时,会弹出颜色对话框,该对话框有以下几种功能:
- 从基础颜色中选择需要的颜色;
- 从色谱图中选择所需颜色;
- 将喜欢的颜色添加到常用颜色中;
- 使用取色器在屏幕上取色;
- 微调三原色数值。
效果图及对应功能如下:
(4)当用户点击“文件”按键时,会弹出文件对话框。这里可以设置文件对话框弹出式父组件、标题、默认打开目录以及文件扩展名过滤器,后面会详细介绍。在当前示例中,只能打开单个文件,且只允许用户打开txt文件,并将文件内容写到文本框中。效果图如下:
(5)当用户退出主窗口时,会弹出消息框,不再详述,效果图如下:
二、QDialog
所有对话框窗体的标题栏上没有最小化和最大化控件,且默认为模态窗口。如果需要修改该属性,可调用setWindowModality()方法,取值如下:
- Qt.NonModal。非模态,在未关闭对话框时,可以和程序的其他窗口进行交互;
- Qt.WindowModal。模态窗口。用户必须处理完当前对话框,才可以和父窗口交互;
- Qt.ApplicationModal。应用程序级模态,即用户在未处理完当前对话框时,不能和任何其他窗口进行交互。
用法如下
Dialog.setWindowModality(Qt.WindowModal)
三、QInputDialog
QInputDialog 控件是一个标准对话框,由一个输入文本框和两个按钮组成。可以从该对话框中获得字符串、数字和列表选项。常用方法如下:
- getItem()。限制选择列表中已有选项
- getDouble()。限制浮点数输入
- getInt()。限制整数输入
- getText()。获得字符串
import sys,os
from PyQt5.QtWidgets import QWidget,QApplication,QInputDialog,QPushButton,QLineEdit,QHBoxLayout,QVBoxLayout
from PyQt5.QtGui import QIcon path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI() def initUI(self):
self.setWindowTitle('QInputDialog示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,350,200) btn_str = QPushButton('获得字符串')
btn_int = QPushButton('获得整数')
btn_item = QPushButton('获得列表选项')
self.lineEdit_str = QLineEdit()
self.lineEdit_int = QLineEdit()
self.lineEdit_item = QLineEdit() vbx1 = QVBoxLayout()
vbx1.addWidget(btn_int)
vbx1.addWidget(btn_item)
vbx1.addWidget(btn_str) vbx2 = QVBoxLayout()
vbx2.addWidget(self.lineEdit_int)
vbx2.addWidget(self.lineEdit_item)
vbx2.addWidget(self.lineEdit_str) hbx = QHBoxLayout()
hbx.addLayout(vbx1)
hbx.addLayout(vbx2)
self.setLayout(hbx) btn_item.clicked.connect(self.getItem)
btn_int.clicked.connect(self.getInt)
btn_str.clicked.connect(self.getStr) def getItem(self):
items = ['装载机','平地机','推土机','挖掘机','自卸车'] #这里设置成列表或元组都可以
item, ok = QInputDialog.getItem(self,'选择项目','请选择您的需求',items,0,False)
if ok and item:
self.lineEdit_item.setText(item) def getInt(self):
# num,ok = QInputDialog.getDouble(self,'双精度','输入您得数字')
num, ok = QInputDialog.getInt(self,'获取整数','输入您的数字(-10~10)',0,-10,10,1)
if ok:
self.lineEdit_int.setText(str(num)) def getStr(self):
str, ok = QInputDialog.getText(self,'获取字符串','请输入您的文本',QLineEdit.Normal,'字符串',)
if ok:
self.lineEdit_str.setText(str) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
QInputDialog示例
效果图如下:
3.1 getItem()
def getItem(self):
items = ['装载机','平地机','推土机','挖掘机','自卸车']
item, ok = QInputDialog.getItem(self,'选择项目','请选择您的需求',items,0,False)
if ok and item:
self.lineEdit_item.setText(item)
该方法限制用户只能在给定的有限内容中做选择。“有限的内容”即示例中的items,这里设置成列表或者元组都是可以的。其次,geiItem方法参数较多,下面进行讲解:
QInputDialog.getItem(QWidget, str, str, list-of-str, int current=0, bool editable=True)
参数依次为:父组件;对话框标题;对话框提示信息;列表对象;默认显示值在列表中的索引值;控件中显示的文字是否可编辑(True:可编辑;False:不可编辑)
3.2 getInt()和getDouble()
def getInt(self):
# num,ok = QInputDialog.getDouble(self,'双精度','输入您得数字')
num, ok = QInputDialog.getInt(self,'获取整数','输入您的数字(-10~10)',0,-10,10,1)
if ok:
self.lineEdit_int.setText(str(num))
getInt()和getDouble()使用方法是完全相同的。注意最后将输入值传给父组件时一定要把数据变为字符串。同样的,该方法参数众多,下面进行介绍:
QInputDialog.getInt(QWidget, str, str, int value=0, int min=-2147483647, int max=2147483647, int step=1)
- 第一个参数为父组件;
- 第二个参数为对话框标题;
- 第三个参数为对话框提示信息;
- 第四个参数为默认值;
- 第五个参数为允许输入的最小值;
- 第六个参数为允许输入的最大值;
- 第七个参数为步长
3.3 getText()
def getStr(self):
str, ok = QInputDialog.getText(self,'获取字符串','请输入您的文本',QLineEdit.Normal,'字符串',)
if ok:
self.lineEdit_str.setText(str)
QInputDialog.getText(QWidget, str, str, QLineEdit.EchoMode echo=QLineEdit.Normal, str text=QString())
几个参数依次是:父组件;对话框标题;对话框提示信息;对话框中QLineEdit控件的输入模式;默认值。其中,对话框中QLineEdit控件的输入模式有4种,详情如下表:
常量 | 值 | 内容 |
QLineEdit.Normal | 0 | 正常显示输入的字符,默认选项。 |
QLineEdit.NoEcho | 1 | 不显示任何输入,常用于密码类型,其密码长度都需要保密的时候。 |
QLineEdit.Password | 2 | 显示平台相关的密码掩码字符,而不是实际的字符输入。 |
QLineEdit.PasswordEchoOnEdit | 3 | 在编辑的时候显示字符,负责显示密码类型。 |
四、QMessageDialog
import sys,os
from PyQt5.QtWidgets import QWidget,QApplication,QMessageBox,QPushButton,QHBoxLayout,QVBoxLayout
from PyQt5.QtGui import QIcon path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget): def __init__(self):
super(MyWindow, self).__init__()
self.initUI() def initUI(self):
self.setWindowTitle('QMessageDialog示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,350,200) self.btn_question = QPushButton('问答对话框')
self.btn_warning = QPushButton('警告对话框')
self.btn_critical = QPushButton('严重错误对话框')
self.btn_about = QPushButton('关于对话框') vbx = QVBoxLayout()
vbx.addWidget(self.btn_about)
vbx.addWidget(self.btn_critical)
vbx.addWidget(self.btn_question)
vbx.addWidget(self.btn_warning) hbx = QHBoxLayout()
hbx.addStretch(1)
hbx.addLayout(vbx)
hbx.addStretch(1)
self.setLayout(hbx) self.btn_question.clicked.connect(self.showquestion)
self.btn_warning.clicked.connect(self.showwarning)
self.btn_critical.clicked.connect(self.showcritical)
self.btn_about.clicked.connect(self.showabout) def showquestion(self):
QMessageBox.question(self,'问答对话框','这是一个问答对话框',QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes) def showwarning(self):
QMessageBox.warning(self, '警告对话框', '这是一个警告对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) def showcritical(self):
QMessageBox.critical(self, '严重错误对话框', '这是一个严重错误对话框', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) def showabout(self):
QMessageBox.about(self, '关于对话框', '这是一个关于对话框') if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
QMessageDialog示例
效果图如下:
该窗体上共有四个按键,对应四种类型的消息对话框。
其中,问答对话框,警告对话框,严重错误对话框的方法相同,以问答对话框为例,QMessageDialog.question(父组件,’对话框标题‘,’对话框内容‘,按键一|按键二,默认按键)。关于对话框只有一个按键ok,不需要用户指定按键,所以只需要给定前三项参数即可。在示例中,我们使用了Yes和No两个按键,实际上pyqt中案件类型不止这两种。
类型 | 作用 |
QMessage.Yes | 是 |
QMessage.No | 否 |
QMessage.Ok | 确认 |
QMessage.Cancel | 取消 |
QMessage.About | 关于 |
QMessage.Retry | 重试 |
QMessage.Ignore | 忽略 |
五、QFileDialog
QFileDialog是用于打开和保存文件的对话框,常用的方法如下:
方法 | 内容 |
getOpenFileName() | 返回所选文件的名称,并打开该文件(单个文件) |
getOpenFileNames() | 返回所选文件的名称,并打开该文件(多个文件) |
getSaveFileName() | 以用户选择的名称给文件命名 |
setFileMode() |
可以选择文件类型,枚举常量是: QFileDialog.AnyFile 任何文件 QFileDialog.ExistingFile 已存在的文件 QFileDialog.Directory 文件目录 QFileDialog.ExistingFiles 因存在的多个文件 |
setFilter | 设置过滤器,只显示过滤器允许的文件类型 |
综合示例中getOpenFileName()方法的各参数释义如下:
getOpenFileName(父组件,标题,对话框打开时默认显示的目录,扩展名过滤器)。当扩展名过滤器需要显示多种文件类型时,各类型之间需要用两个分号隔开。示例如下
import sys,os
from PyQt5.QtWidgets import QWidget,QApplication,QFileDialog,QPushButton,QTextEdit,QVBoxLayout
from PyQt5.QtGui import QIcon path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI() def initUI(self):
self.setWindowTitle('QFileDialog示例')
self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' % path))
self.setGeometry(600,300,350,200) btn = QPushButton('打开文件')
self.text = QTextEdit() vbx = QVBoxLayout()
vbx.addWidget(btn)
vbx.addWidget(self.text)
self.setLayout(vbx) btn.clicked.connect(self.openfile) def openfile(self):
fname, _ = QFileDialog.getOpenFileName(self,'打开文件','C:\\','TXT Files(*.txt);;DOC Files(*.docx)')
if fname:
f = open(fname, 'r')
with f:
data = f.read()
self.text.setText(data) if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
QFileDialog示例
效果图如下:
六、pyqt5对话框——QInputDialog、QColorDialog、QFontDialog、QMessageBox、QFileDialog的更多相关文章
- PyQt5对话框
QinputDialog 输入的值可以是字符串,数字,或者一个项目从一个列表 def showDialog(self): text, ok = QInputDialog.getText(self, ' ...
- Qt__输入对话框(QInputDialog)
#include <QInputDialog> ...... bool isOK; QString text = QInputDialog::getText(NULL, "Inp ...
- Qt标准对话框之QColorDialog
Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,比如本节中将要介绍的颜色对话框——QColorDialog. 在不同的系统平台下,颜色对话框的显示效果可能会有所不同,主要因系统主题风格而异 ...
- PyQt5 对话框示例
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * class Example(QMainWindow): def _ ...
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...
- Python脚本控制的WebDriver 常用操作 <十六> 处理对话框
下面将使用webdriver来处理一些页面跳出的对话框事件 测试用例场景 页面上弹出的对话框是自动化测试经常会遇到的一个问题.前端框架的对话框经常是div形式的,下面是一些常见的对话框操作事件: 打开 ...
- 工作总结:VS2010/MFC编程入门之十六(对话框:消息对话框)
原文地址:http://www.jizhuomi.com/software/171.html 我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等.因为在软件开发中 ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第六章 对话框
第6章 对话框 一个对话框是一个小窗口,提示用户做出决定或输入额外的信息,一个对话框不填充屏幕并且通常用于在程序运行时中断,然后弹出通知提示用户,从而直接影响到正在运行的程序.图6-1就是对话框的外观 ...
- VS2010/MFC编程入门之十六(对话框:消息对话框)
前面几节鸡啄米讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消 ...
随机推荐
- 分布式 基本理论 CAP 2
关于P P, 即 Partition字面意思是网络分区,其实 包括了 各种网络问题, 我们要把它理解 一个 广义的 分区问题. P 涉及到了 时间, 这么说吧, 出现了分区, 那就是节点之间 “长久的 ...
- java web复习(二)
三.四种属性范围及应用 setAttribute(String name,Object o)设置属性 getAttribute(String name)根据属性名取得属性 removeAttribut ...
- part1
一.hello world 明确的指出 hello.py 脚本由 python 解释器来执行.coding:utf-8处理脚本中的中文 #!/usr/bin/env python # _*_ codi ...
- OpenStack构架简介
OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云 ...
- [HTML]将错误alert出来[转]
<script type="text/javascript"> /** * @param {String} errorMessage 错误信息 * @param {St ...
- 阿里云从0安装mysql到远程连接
1.安装mysql数据库. (1)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rp ...
- Javascript中用来实现继承的几种方式
一.原型链继承 原理:修改子类型的原型,使其指向父类型的实例: 缺点: 1,不能以字面量方式在子类型的原型上添加新方法:这回重新改写子类型的原型: 2 创建子类型的实例时无法向父类型的构造函数传参. ...
- 解决matplotlib中文显示
网上搜的很多方法都不是很好用,这里找到了一个比较好用的办法. 首先将win上的中文字体复制到linux目录下面,我这里使用的是simhei.ttf.然后参考如下代码的使用方式: import matp ...
- 第8章 IO库 自我综合练习
要求: 文本内容: Tom 11144455 12345678998 Jone 88888888 99999999999 1.将文本文件中的内容读入,并显示到屏幕上: 2.手动输入“Mary 77 ...
- SpringBoot之Swagger2
SpringBoot利用Swagger2只需配置少量的注解信息便能方便地构建强大的API文档. 1.添加maven依赖 2.创建Swagger2配置类 3.在API添加文档内容 4.访问http:// ...