前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyQt5 对话框 数据验证

PyQt5 对话框 数据验证

作者头像
用户6021899
发布于 2019-08-14 09:38:25
发布于 2019-08-14 09:38:25
1.2K0
举报

本篇介绍PyQt5对话框的数据合法性的验证。有两种验证方式:预防式验证(preventative)和 提交后验证 (post-mortem)。预防式验证适合于单个部件的数据验证,可以通过选择合适的部件类型,设置最大字符长度或者数字的大小范围,应用正则表达式等等来进行预防式验证。提交后验证可应用于单个控件,也可应用于多部件交叉验证。两种验证策略可单独或者组合使用。

具体的运用请参见如下代码:

import sys from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.Qt import QRegExp,QRegExpValidator from PyQt5.QtWidgets import *

#非模态对话框("Apply"型更新),自定义信号,数据验证,正则表达式,掩码

class NumberFormatDlg(QDialog): changed = pyqtSignal()#自定义信号 def __init__(self,format_,parent=None): super().__init__(parent) thousandsLabel = QLabel("&Thousands seprator") self.thousandsEdit = QLineEdit(format_["thousandsseparator"]) self.thousandsEdit.setMaxLength(1)

#正则表达式 punctuationRe = QRegExp(r"[ ,;:.]") #只能为中括号内的某个字符,还可以为空 #设定验证方式为正则表达式,不合规的字符输入不进去。预防式验证 self.thousandsEdit.setValidator(QRegExpValidator(punctuationRe,self)) thousandsLabel.setBuddy(self.thousandsEdit)

decimalMarkerLabel = QLabel("Decimal &marker") self.decimalMarkerEdit = QLineEdit(format_["decimalmarker"]) self.decimalMarkerEdit.setMaxLength(1) self.decimalMarkerEdit.setValidator(QRegExpValidator(punctuationRe,self)) self.decimalMarkerEdit.setInputMask("X")#设定掩码 decimalMarkerLabel.setBuddy(self.decimalMarkerEdit)

decimalPlacesLabel = QLabel("&Decimal places") self.decimalPlacesSpinBox = QSpinBox() self.decimalPlacesSpinBox.setRange(0,6) self.decimalPlacesSpinBox.setValue(format_["decimalplaces"])

decimalPlacesLabel.setBuddy(self.decimalPlacesSpinBox)

self.redNegativesCheckBox = QCheckBox("&Red negative numbers") self.redNegativesCheckBox.setChecked(format_["rednegatives"])

buttonBox = QDialogButtonBox(QDialogButtonBox.Apply | QDialogButtonBox.Close)

buttonBox.button(QDialogButtonBox.Apply).clicked.connect(self.apply) buttonBox.rejected.connect(self.reject)

grid = QGridLayout() grid.addWidget(thousandsLabel,0,0) grid.addWidget(self.thousandsEdit,0,1) grid.addWidget(decimalMarkerLabel,1,0) grid.addWidget(self.decimalMarkerEdit,1,1) grid.addWidget(decimalPlacesLabel,2,0) grid.addWidget(self.decimalPlacesSpinBox,2,1) grid.addWidget(self.redNegativesCheckBox,3,0,1,2) grid.addWidget(buttonBox,4,0,1,2) self.setLayout(grid)

self.setWindowTitle("数字格式设置(非模态)")

self.format = format_

def apply(self): thousands = self.thousandsEdit.text() decimal = self.decimalMarkerEdit.text()

#提交后验证 #交叉验证 if thousands == decimal: QMessageBox.warning(self,"格式错误","千位分隔符和小数点符不能相同") self.thousandsEdit.selectAll() self.thousandsEdit.setFocus() return if decimal == '': QMessageBox.warning(self,"格式错误","小数点符不能为空") self.decimalMarkerEdit.selectAll() self.decimalMarkerEdit.setFocus() return

self.format["thousandsseparator"] = thousands self.format["decimalmarker"] = decimal self.format["decimalplaces"] = self.decimalPlacesSpinBox.value() self.format["rednegatives"] = self.redNegativesCheckBox.isChecked() self.changed.emit()#发射自定义信号

class MainDialog(QDialog): def __init__(self,parent=None): super(MainDialog,self).__init__(parent) format_ = dict(thousandsseparator =",",decimalmarker=".",decimalplaces = 3,rednegatives =True) self.dialog = NumberFormatDlg(format_) button = QPushButton("click here",self) button.clicked.connect(self.dialog.show) app = QApplication(sys.argv) font= MainDialog() font.show() app.exec_()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyQt5 非模态对话框(apply 型)
如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。
用户6021899
2019/08/13
1.4K0
PyQt5 模态对话框
所谓的模态对话框是指,一旦调用该对话框,它就会成为应用程序唯一能与用户进行交互的部件。在关闭对话框之前,用户都不能使用应用程序的其他部件。模态对话框是最简单的,因为会阻塞与对话框的父窗口及父窗口的兄弟窗口之间的其他任何交互,所以可降低对那些正在使用的数据在后台被修改的风险。模态对话框的缺点是用户不能实时地看到修改效果。
用户6021899
2019/08/13
2.5K0
PyQt5案例汇总(完整版)
PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。
victorfengming
2021/11/26
5.3K0
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的。如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。
不脱发的程序猿
2021/12/08
3.4K0
Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
文章目录 1. 状态栏 2. 窗口居中显示 3. 关闭窗口 4. QWidget 5. 添加图标 6. 气泡提示信息 7. QLabel 添加快捷键 8. QLineEdit echoMode 验证器 inputMask 综合练习 9. QTextEdit learn from 《PyQt5 快速开发与实战》 1. 状态栏 self.statusbar.showMessage("hello, Michael", 2000),第二个参数是显示多长时间ms,默认无限长时间 # -*- coding: utf-8
Michael阿明
2022/05/10
2.7K0
PyQt5 基本窗口控件(状态栏/窗口/图标/提示消息/QLabel/文本类控件)
Qt编写自定义控件68-IP地址输入框
这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式过滤只能输入3位数字,然后安装事件过滤器识别回车自动跳到下一个输入框。关于如何设置正则表达式过滤,这个可以搜索查到,本人也不大懂这个规则,貌似还有专门的书籍专门介绍正则表达式,可能这块非常强大。
feiyangqingyun
2019/10/16
2.1K0
Qt编写自定义控件68-IP地址输入框
PyQt5 输入对话框QInputDialog
(int, bool ok) QInputDialog.getInt (QWidget parent, QString title, QString label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, Qt.WindowFlags flags = 0)
用户6021899
2019/08/14
2.8K0
PyQt5 消息对话框QMessageBox
本篇讲解PyQt中预置的5种消息对话框: QMessageBox.about 关于 QMessageBox.ctitical危险 QMessageBox.information 信息框 QMessag
用户6021899
2019/08/13
1.8K0
pyqt5 lineedit_pyqt5 tablewidget
定义输入掩码的字符 下表列出了输入掩码的占位符和字面字符,并说明其如何控制数据输入
全栈程序员站长
2022/11/08
1.3K0
pyqt5 lineedit_pyqt5 tablewidget
Pyqt5 关于流式布局和滚动条的综合使用
所谓流式布局指的是容器中的元素像流水一样,是可以浮动的,当元素一行或者一列占满的时候,它会自动流入到下一行或者下一列。
程序那些事儿
2023/03/07
1.6K0
Pyqt5 关于流式布局和滚动条的综合使用
PyQT5事件和信号
TomatoCool
2023/07/30
2810
PyQT5事件和信号
【QT】常用控件(三)
我们来写一个倒计时小程序,其中,QTimer就是一个定时器,通过start启动定时器,通过stop关闭定时器,开启定时器后,每隔一定的周期(自己设置的)触发一次timeout信号,通过connect把该信号与我们自定义的槽函数updateTime相关联后,让槽函数改变LCDNumber的显示值,倒计时就写好了
s-little-monster
2024/10/22
2420
【QT】常用控件(三)
qlineedit输入提示_qlineedit设置不可编辑
QLineEdit.NoEcho:不显示任何输入的字符,常用于密码类型的输入,且长度保密
全栈程序员站长
2022/11/08
4.9K0
qlineedit输入提示_qlineedit设置不可编辑
PyQt5 字体/颜色/打印/打印预览对话框
本篇介绍PyQt5 的字体选择对话框,颜色选择对话框,打印预览对话框,和打印对话框。 QFontDialog.getFont() QColorDialog.getColor() QPrintPr
用户6021899
2019/08/13
4.2K0
【QT】显示类控件
虽然 QPushButton 也可以通过设置图标的⽅式设置图⽚,但是并⾮是⼀个好的选择。更多的时候还是希望通过 QLabel 来作为⼀个更单纯的显⽰图⽚的⽅式。
YoungMLet
2024/07/16
2550
【QT】显示类控件
相关推荐
PyQt5 非模态对话框(apply 型)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档