QLineEdit控件是单行文本编辑器.用于接收用户输入的字符串数据,并显示字符串数据,输人的整数和浮点数也会当作字符串数据。QLineEdit的功能非常多,下面就来简单说一下常用的一些功能。更多关于QLineEdit的资料可以参考下面的文档。

https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QLineEdit.html

Pyside6 QLineEdit

文本操作函数

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())

Pyside6 QLineEdit-LMLPHP

文本限制函数

设置文本框最大输入个数

self.ui.lineEdit_2.setMaxLength(10)# 最大输入个数为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})?$
 71-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
 8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
 9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
101~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}$
 426个英文字母组成的字符串:^[A-Za-z]+$
 526个大写英文字母组成的字符串:^[A-Z]+$
 626个小写英文字母组成的字符串:^[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-4405222021-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个月(0109112)^(0?[1-9]|1[0-2])$
13 一个月的31(0109131)^((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.13个数字,后面跟着任意个 逗号+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)

Pyside6 QLineEdit-LMLPHP

文本格式函数

设置密码格式

  • 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)# 设置密码形式

设置文本格式

Pyside6 QLineEdit-LMLPHP

self.ui.lineEdit_14.setInputMask("000.000.000.000") # 设置掩码格式
self.ui.lineEdit_16.setInputMask("BBBBBBBB") # 设置掩码格式

Pyside6 QLineEdit-LMLPHP

程序

界面程序

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>653</width>
    <height>422</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
       <number>0</number>
      </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>16777215</width>
              <height>20</height>
             </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>10</pointsize>
             </font>
            </property>
            <property name="text">
             <string>最大输入个数10</string>
            </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>10</pointsize>
             </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>0</x>
     <y>0</y>
     <width>653</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

主程序

# Import Qt libraries
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
# Import UI developed in Qt Creator
from lineedit_ui import Ui_MainWindow  # 导入界面
# Import PseudoSensor
# Import system tools and datetime
import sys
import statistics
import time
from datetime import datetime

# Create and start the Qt application
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_3.setEchoMode(QLineEdit.EchoMode.Password)# 设置密码形式
        #self.ui.lineEdit_2.setInputMask("000.000.000.000")

        self.ui.lineEdit_2.setMaxLength(10)# 最大输入个数为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)# 最大输入个数为10


        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) # 初始化QApplication

    # 初始化界面并显示界面
    window = MainWindow() 
    window.show() 
    window.setFixedSize(window.width(), window.height())
    sys.exit(app.exec())
10-21 11:26