主题:实现不同标签和输入框校验功能
1 标签控件
1.1 文本标签(基础标签)
文本标签是最基本的标签,只需要配置文字就可以了
label1=QLabel(self)
label1.setText("文本标签")
#允许用户通过鼠标选择label1中的文本
label1.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
label1.move(10,10)
1.2 样式标签
可以对标签设置样式,添加css样式。
label2=QLabel(self)
label2.setText('<font size="6" color="skyblue">控制文本颜色背景颜色</font>')
label2.setAlignment(Qt.AlignmentFlag.AlignCenter)
label2.setAutoFillBackground(True)
label2.move(10,40)
#引入绘图板
palette=QPalette()
#添加白色背景
palette.setColor(QPalette.ColorRole.Window, Qt.GlobalColor.white)
label2.setPalette(palette)
1.3 图片标签
可以直接把图片放到标签的位置,实现图片预览效果。
label3=QLabel(self)
label3.move(10,80)
label3.setToolTip('图片标签...')
label3.setPixmap(QPixmap("./images/1.jpg"))
label3.linkActivated.connect(self.clickedFunc)
1.4 超链接标签
其实和样式标签类似,只是添加了html的a标签而已。
label4=QLabel(self)
label4.move(10,280)
label4.setText("<a href='https://blog.csdn.net/weixin_38298363'>请关注美男子</a>")
label4.setAlignment(Qt.AlignmentFlag.AlignRight)
label4.linkHovered.connect(self.hoveredFunc)
2 输入框标签
输入框标签里最人性化的是能够添加校验器Validator
#定义表单布局
fLayout=QFormLayout()
#定义表单控件
leBH=QLineEdit()
leXM=QLineEdit()
leMM=QLineEdit()
leCSRQ=QLineEdit()
leGL=QLineEdit()
leJBGZ=QLineEdit()
leIP=QLineEdit()
leCH=QLineEdit()
fLayout.addRow("编号:",leBH)
fLayout.addRow("姓名:",leXM)
fLayout.addRow("登录密码:",leMM)
fLayout.addRow("出生日期:",leCSRQ)
fLayout.addRow("工龄:",leGL)
fLayout.addRow("基本工资:",leJBGZ)
fLayout.addRow("本机IP地址:",leIP)
fLayout.addRow("车号:",leCH)
接下来配置校验器和Mask效果
# 编号只能为6位
leBH.setPlaceholderText("编号为6位")
leBH.setInputMask("999999")
leMM.setPlaceholderText("密码是字母和数字组合")
leMM.setEchoMode(QLineEdit.EchoMode.Password)
#设置正则表达式进行校验密码
reg=QRegularExpression("[a-zA-Z0-9]+$")
mmValidator=QRegularExpressionValidator(self)
mmValidator.setRegularExpression(reg)
leMM.setValidator(mmValidator)
# 工龄范围为1-45
glIntValidator=QIntValidator(self)
glIntValidator.setRange(1,45)
leGL.setValidator(glIntValidator)
jbDoubleleValidator=QDoubleValidator(self)
#基本工资为浮点数
jbDoubleleValidator.setRange(0.00,9999.99)
jbDoubleleValidator.setNotation(QDoubleValidator.Notation.StandardNotation)
jbDoubleleValidator.setDecimals(2)
leJBGZ.setValidator(jbDoubleleValidator)
#出生日期目前还没有查过9999年的
leCSRQ.setInputMask("9999-00-00")
#ipv4地址
leIP.setInputMask("000.000.000.000")
#车牌通常为七位
leCH.setInputMask("XXXXXXX")
3 完整代码
# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 控件汇总.py
Description:
Author: LQ
date:2024-07-26 12:52
------------------------------------------------
"""
import sys
from PyQt6.QtCore import Qt, QRegularExpression
from PyQt6.QtGui import QPalette, QPixmap, QRegularExpressionValidator, QIntValidator, QDoubleValidator
from PyQt6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout, QFormLayout, QLineEdit
class MyWidget(QWidget):
def __init__(self,parent=None):
super(MyWidget,self).__init__(parent)
self.setWindowTitle("控件测试")
self.resize(300,650)
ww=QWidget(self)
vlayout_ww=QVBoxLayout(ww)
label1=QLabel(self)
label1.setText("文本标签")
label1.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
label1.move(10,10)
label2=QLabel(self)
label2.setText('<font size="6" color="skyblue">控制文本颜色背景颜色</font>')
label2.setAlignment(Qt.AlignmentFlag.AlignCenter)
label2.setAutoFillBackground(True)
label2.move(10,40)
palette=QPalette()
palette.setColor(QPalette.ColorRole.Window, Qt.GlobalColor.white)
label2.setPalette(palette)
label3=QLabel(self)
label3.move(10,80)
label3.setToolTip('图片标签...')
label3.setPixmap(QPixmap("./images/1.jpg"))
label3.linkActivated.connect(self.clickedFunc)
label4=QLabel(self)
label4.move(10,280)
label4.setText("<a href='https://blog.csdn.net/weixin_38298363'>请关注美男子</a>")
label4.setAlignment(Qt.AlignmentFlag.AlignRight)
label4.linkHovered.connect(self.hoveredFunc)
vbox = QVBoxLayout()
vbox.addWidget(label1)
vbox.addWidget(label2)
vbox.addWidget(label3)
vbox.addStretch()
vbox.addWidget(label4)
fLayout=QFormLayout()
leBH=QLineEdit()
leXM=QLineEdit()
leMM=QLineEdit()
leCSRQ=QLineEdit()
leGL=QLineEdit()
leJBGZ=QLineEdit()
leIP=QLineEdit()
leCH=QLineEdit()
fLayout.addRow("编号:",leBH)
fLayout.addRow("姓名:",leXM)
fLayout.addRow("登录密码:",leMM)
fLayout.addRow("出生日期:",leCSRQ)
fLayout.addRow("工龄:",leGL)
fLayout.addRow("基本工资:",leJBGZ)
fLayout.addRow("本机IP地址:",leIP)
fLayout.addRow("车号:",leCH)
# 编号只能为6位
leBH.setPlaceholderText("编号为6位")
leBH.setInputMask("999999")
leMM.setPlaceholderText("密码是字母和数字组合")
leMM.setEchoMode(QLineEdit.EchoMode.Password)
reg=QRegularExpression("[a-zA-Z0-9]+$")
mmValidator=QRegularExpressionValidator(self)
mmValidator.setRegularExpression(reg)
leMM.setValidator(mmValidator)
# 工龄范围为1-45
glIntValidator=QIntValidator(self)
glIntValidator.setRange(1,45)
leGL.setValidator(glIntValidator)
jbDoubleleValidator=QDoubleValidator(self)
jbDoubleleValidator.setRange(0.00,9999.99)
jbDoubleleValidator.setNotation(QDoubleValidator.Notation.StandardNotation)
jbDoubleleValidator.setDecimals(2)
leJBGZ.setValidator(jbDoubleleValidator)
leCSRQ.setInputMask("9999-00-00")
leIP.setInputMask("000.000.000.000")
leCH.setInputMask("XXXXXXX")
vlayout_ww.addLayout(vbox)
vlayout_ww.addLayout(fLayout)
def clickedFunc(self):
print("鼠标点击图片标签...")
def hoveredFunc(self):
print("鼠标划过超链接标签...")
if __name__=="__main__":
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec())
下一篇:还是 控件汇总