QLineEdit控件是单行文本编辑器.用于接收用户输入的字符串数据,并显示字符串数据,输人的整数和浮点数也会当作字符串数据。QLineEdit的功能非常多,下面就来简单说一下常用的一些功能。更多关于QLineEdit的资料可以参考下面的文档。
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QLineEdit.html
Pyside6 QLineEdit
文本操作函数
函数 |
作用 |
setText |
设置文本 |
text |
获取文本 |
selectedText |
获取光标选择的文本 |
clear |
清空文本 |
setAlignment |
设置文本对齐方式 |
x |
AlignLeft::水平方向靠左 |
x |
AlignRight:水平方向靠右 |
x |
AlignHCenter:水平方向居中 |
x |
AlignJustify:水平方向调整间距两端对齐 |
x |
AlignTop:垂直方向靠上 |
x |
AlignBottom:垂直方向靠下 |
x |
AlignVCenter:垂直方向居中 |
x |
AlignCenter:等价于 Qt::AlignHCenter |
cursorPositionChanged(int,int) |
当光标改变的时候触发,前者为旧光标位置,后着为新光标位置 |
textChanged |
当文本改变的时候触发 |
textEdited |
用户输入文本的时候触发,程序设置文本不触发 |
selectionChanged |
光标选择文本的时候触发 |
self.date_time = QTimer()
self.date_time.timeout.connect(self.updatetime)
self.date_time.start(1000)
self.ui.lineEdit_5.setText("123456789")
self.ui.lineEdit_5.setAlignment(Qt.AlignLeft)
self.ui.lineEdit_6.setText("123456789")
self.ui.lineEdit_6.setAlignment(Qt.AlignHCenter)
self.ui.lineEdit_7.setText("123456789")
self.ui.lineEdit_7.setAlignment(Qt.AlignRight)
self.ui.lineEdit.cursorPositionChanged.connect(self.cursorPositionChanged)
self.ui.lineEdit.textChanged.connect(self.textChanged)
self.ui.lineEdit.selectionChanged.connect(self.selectionChanged)
def textChanged(self):
print(self.ui.lineEdit.text())
def cursorPositionChanged(self,arg1,arg2):
print("旧光标位置 " ,arg1,"新光标位置 " ,arg2)
def selectionChanged(self):
print(self.ui.lineEdit.selectedText())
文本限制函数
函数 |
作用 |
setMaxLength |
设置文本框最大输入个数 |
setReadOnly |
设置文本框为只读,用户可以往文本框输入内容,但是输入完之后不能删除内容 |
setValidator |
设置输入格式 |
设置文本框最大输入个数
self.ui.lineEdit_2.setMaxLength(10)
设置只读
self.ui.lineEdit_3.setReadOnly(True)
设置输入格式
可以使用正则表达式设置文本框的输入格式,以下是常用的正则表达式
一、校验数字的表达式:
1 数字:^[0-9]*$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]*)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
————————————————————————————————
二、校验字符的表达式:
1 汉字:^[\u4e00-\u9fa5]{0,}$
2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:^[A-Z]+$
6 由26个小写英文字母组成的字符串:^[a-z]+$
7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
12 禁止输入含有~的字符:[^~\x22]+
————————————————————————————————
三、特殊需求表达式:
1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 手机号码:^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$ (由于工信部放号段不定时,所以建议使用泛解析 ^([1][3,4,5,6,7,8,9])\d{9}$)
5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 18位身份证号码(数字、字母x结尾):^((\d{18})|([0-9x]{18})|([0-9X]{18}))$
8 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
9 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
10 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
11 日期格式:^\d{4}-\d{1,2}-\d{1,2}
12 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
13 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
14 钱的输入格式:
15 1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
16 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
17 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
18 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
19 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
20 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
21 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
22 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
23 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
24 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
25 中文字符的正则表达式:[\u4e00-\u9fa5]
26 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
27 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
28 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
29 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
30 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
31 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
32 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
33 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
————————————————————————————————
regx = QRegularExpression("^[0-9]*$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_8.setValidator(my_regex)
regx = QRegularExpression("^[A-Z]+$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_9.setValidator(my_regex)
regx = QRegularExpression("^[a-z]+$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_10.setValidator(my_regex)
文本格式函数
函数 |
作用 |
setEchoMode |
设置密码格式 |
setInputMask |
设置文本格式 |
设置密码格式
- Password:密码,用小黑点覆盖你所输入的字符
- PasswordEchoOnEdit:编辑时输入字符显示输入内容,否则用小黑点代替
- NoEcho:任何输入都看不见(只是看不见,不是不能输入)
- Normal:输入字符正常显示
self.ui.lineEdit_15.setText("0123456789")
self.ui.lineEdit_15.setEchoMode(QLineEdit.EchoMode.Normal)
self.ui.lineEdit_11.setText("0123456789")
self.ui.lineEdit_11.setEchoMode(QLineEdit.EchoMode.Password)
self.ui.lineEdit_12.setText("0123456789")
self.ui.lineEdit_12.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
self.ui.lineEdit_13.setText("0123456789")
self.ui.lineEdit_13.setEchoMode(QLineEdit.EchoMode.NoEcho)
设置文本格式
self.ui.lineEdit_14.setInputMask("000.000.000.000")
self.ui.lineEdit_16.setInputMask("BBBBBBBB")
程序
界面程序
<ui version="4.0">
<class>MainWindowclass>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0x>
<y>0y>
<width>653width>
<height>422height>
rect>
property>
<property name="windowTitle">
<string>MainWindowstring>
property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0number>
property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>文本操作string>
attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>时间显示string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_4"/>
item>
layout>
item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>水平方向靠左string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_5"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>水平方向居中string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_7"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>文本水平方向靠右string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_6"/>
item>
layout>
item>
layout>
item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QLabel" name="label_7">
<property name="maximumSize">
<size>
<width>16777215width>
<height>20height>
size>
property>
<property name="text">
<string>信号测试string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
item>
layout>
item>
layout>
widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>文本限制string>
attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>10pointsize>
font>
property>
<property name="text">
<string>最大输入个数10string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>10pointsize>
font>
property>
<property name="text">
<string>设置只读string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_3"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>只输入数字string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_8"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>只输入大写字母string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_9"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>只输入小写字母string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_10"/>
item>
layout>
item>
layout>
widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>文本掩码string>
attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_16">
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>正常显示字符string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_15"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>字符以密码形式显示string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_11"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>编辑时输入字符显示输入内容string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_12"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QLabel" name="label_13">
<property name="text">
<string>字符任何人不可见string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_13"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>输入IP地址string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_14"/>
item>
layout>
item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>输入二进制数string>
property>
widget>
item>
<item>
<widget class="QLineEdit" name="lineEdit_16"/>
item>
layout>
item>
layout>
widget>
widget>
item>
layout>
widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0x>
<y>0y>
<width>653width>
<height>22height>
rect>
property>
widget>
<widget class="QStatusBar" name="statusbar"/>
widget>
<resources/>
<connections/>
ui>
主程序
from PySide6.QtWidgets import *
from PySide6.QtCore import QFile,QTimer,Qt,QRegularExpression
from PySide6.QtGui import QIcon, QPixmap, QMovie, QPainter, QBrush, QPen, QColor, QPalette, QFont, QImage,QTextCursor,QValidator,QIntValidator,QRegularExpressionValidator
from lineedit_ui import Ui_MainWindow
import sys
import statistics
import time
from datetime import datetime
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.date_time = QTimer()
self.date_time.timeout.connect(self.updatetime)
self.date_time.start(1000)
self.ui.lineEdit_5.setText("123456789")
self.ui.lineEdit_5.setAlignment(Qt.AlignLeft)
self.ui.lineEdit_6.setText("123456789")
self.ui.lineEdit_6.setAlignment(Qt.AlignHCenter)
self.ui.lineEdit_7.setText("123456789")
self.ui.lineEdit_7.setAlignment(Qt.AlignRight)
self.ui.lineEdit.cursorPositionChanged.connect(self.cursorPositionChanged)
self.ui.lineEdit.textChanged.connect(self.textChanged)
self.ui.lineEdit.selectionChanged.connect(self.selectionChanged)
self.ui.lineEdit_2.setMaxLength(10)
regx = QRegularExpression("^[0-9]*$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_8.setValidator(my_regex)
regx = QRegularExpression("^[A-Z]+$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_9.setValidator(my_regex)
regx = QRegularExpression("^[a-z]+$")
my_regex = QRegularExpressionValidator(regx)
self.ui.lineEdit_10.setValidator(my_regex)
self.ui.lineEdit_3.setReadOnly(True)
self.ui.lineEdit_15.setText("0123456789")
self.ui.lineEdit_15.setEchoMode(QLineEdit.EchoMode.Normal)
self.ui.lineEdit_11.setText("0123456789")
self.ui.lineEdit_11.setEchoMode(QLineEdit.EchoMode.Password)
self.ui.lineEdit_12.setText("0123456789")
self.ui.lineEdit_12.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
self.ui.lineEdit_13.setText("0123456789")
self.ui.lineEdit_13.setEchoMode(QLineEdit.EchoMode.NoEcho)
self.ui.lineEdit_14.setInputMask("000.000.000.000")
self.ui.lineEdit_16.setInputMask("BBBBBBBB")
def updatetime(self):
self.ui.lineEdit_4.setText(str(datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
def textChanged(self):
print(self.ui.lineEdit.text())
def cursorPositionChanged(self,arg1,arg2):
print("旧光标位置 " ,arg1,"新光标位置 " ,arg2)
def selectionChanged(self):
print(self.ui.lineEdit.selectedText())
def closeAndExit(self):
sys.exit()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
window.setFixedSize(window.width(), window.height())
sys.exit(app.exec())