QLineEdit(单行文本框)
QLineEdit是指单行文本框控件,只可输入单行字符串,若想输入多行,则可使用QTextEdit
常用方法
一般情况下,我们需要限制文本框的输入内容,比如纯数字,或者纯字母,在这种情况下,我们采取正则表达式+掩码的方法进行,下面列出了掩码的占位符以及字面符,并给出了QLineEdit使用的常用信号
实例
1.文本框输入显示格式
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QLineEdit,QWidget,QFormLayout
from PyQt5.QtGui import QPixmap,QPalette
# QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,可以进行,贴图,添加控件颜色的作用
#QPalette是Qt中的一个调色板类,用于美化界面
from PyQt5.QtCore import Qt
class WinDemo(QWidget):
def __init__(self,parent=None):
super(WinDemo,self).__init__(parent)
self.setWindowTitle("QLineEdit实例")
flo=QFormLayout()
#f分别创建四种文本框显示格式
pNormal=QLineEdit()
pNoEch=QLineEdit()
pPass=QLineEdit()
pPassEch=QLineEdit()
#添加
flo.addRow('Normal',pNormal)
flo.addRow('NoEcho',pNoEch)
flo.addRow('Password',pPass)
flo.addRow('PassswordEchoOnEdit',pPassEch)
##设置setPlaceholderText()文本框浮现的文字
pNormal.setPlaceholderText('默认')
pNoEch.setPlaceholderText('不显示任何输入的字符')
pPass.setPlaceholderText('显示密码掩码')
pPassEch.setPlaceholderText('编辑时显示,编辑完成后密码掩码')
#s设置显示效果
pNormal.setEchoMode(QLineEdit.Normal)
pNoEch.setEchoMode(QLineEdit.NoEcho)
pPass.setEchoMode(QLineEdit.Password)
pPassEch.setEchoMode(QLineEdit.PasswordEchoOnEdit)
self.setLayout(flo)
if __name__=='__main__':
app=QApplication(sys.argv)
win=WinDemo()
win.show()
sys.exit(app.exec_())
效果
2.验证器setValidator的使用
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QLineEdit,QWidget,QFormLayout
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator
from PyQt5.QtCore import QRegExp
class WinDemo(QWidget):
def __init__(self,parent=None):
super(WinDemo,self).__init__(parent)
self.setWindowTitle("QLineEdit实例")
flo=QFormLayout()
#f分别创建三种文本框
pInt=QLineEdit()
pDouble=QLineEdit()
pVali=QLineEdit()
#添加
flo.addRow('整型',pInt)
flo.addRow('浮点型',pDouble)
flo.addRow('字母和数字',pVali)
##设置setPlaceholderText()文本框浮现的文字
pInt.setPlaceholderText('整型')
pDouble.setPlaceholderText('浮点型')
pVali.setPlaceholderText('字母和数字')
#设置输入格式
#设置整型范围
pIntValidator=QIntValidator(self)
pIntValidator.setRange(1,99)
#设置浮点型范围,【-100,100】,保留2位小数
pDoubleValidator=QDoubleValidator(self)
pDoubleValidator.setRange(-100,100)
pDoubleValidator.setNotation(QDoubleValidator.StandardNotation)
pDoubleValidator.setDecimals(2)
#字母和数字(限制规则按指定的正则表达式)
reg=QRegExp("[a-zA-Z)-9]+$")
pValidator=QRegExpValidator(self)
pValidator.setRegExp(reg)
#设置验证器
pInt.setValidator(pIntValidator)
pDouble.setValidator(pDoubleValidator)
pVali.setValidator(pValidator)
self.setLayout(flo)
if __name__=='__main__':
app=QApplication(sys.argv)
win=WinDemo()
win.show()
sys.exit(app.exec_())
3.掩码
若限制用户输入,除了使用验证器,还可以使用输入掩码的方式
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QLineEdit,QWidget,QFormLayout
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator
from PyQt5.QtCore import QRegExp
class WinDemo(QWidget):
def __init__(self,parent=None):
super(WinDemo,self).__init__(parent)
self.setWindowTitle("掩码实例")
flo=QFormLayout()
#f分别创建三种文本框
pIp=QLineEdit()
pMac=QLineEdit()
pDate=QLineEdit()
pLicense= QLineEdit()
pIp.setInputMask("000.000.000.000;_")
pMac.setInputMask("HH:HH:HH:HH:HH:HH;_")
pDate.setInputMask("0000-00-00")
pLicense.setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#")
#添加
flo.addRow('数字掩码',pIp)
flo.addRow('Mac掩码',pMac)
flo.addRow('日期掩码',pDate)
flo.addRow("许可证掩码",pLicense)
self.setLayout(flo)
if __name__=='__main__':
app=QApplication(sys.argv)
win=WinDemo()
win.show()
sys.exit(app.exec_())
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QLineEdit,QWidget,QFormLayout
from PyQt5.QtGui import QIntValidator,QDoubleValidator,QRegExpValidator,QFont
from PyQt5.QtCore import QRegExp,Qt
class WinDemo(QWidget):
def __init__(self,parent=None):
super(WinDemo,self).__init__(parent)
self.setWindowTitle("综合实例")
flo=QFormLayout()
#e1显示文本使用自定义字体,右对齐,允许输入整数
e1=QLineEdit()
e1.setValidator(QIntValidator())#输入限制
e1.setMaxLength(4)#设置最大输入位数
e1.setAlignment(Qt.AlignRight)#设置对齐
e1.setFont(QFont("Arial",20))#设置字体以及大小
flo.addRow("integer validator", e1)
#输入两位小数
e2=QLineEdit()
e2.setValidator(QDoubleValidator(0.99,99.99,2))
flo.addRow("Double validator",e2)
#输入电话号码
e3=QLineEdit()
e3.setInputMask('+99_9999_99999')#设置掩码
flo.addRow("Input Mask",e3)
#检测输入并发射信号
e4=QLineEdit()
e4.textChanged.connect(self.textchange)#检测到输入变化发射信号
flo.addRow("Text Changed",e4)
#输入密码,并当按下回车键时,程序执行
e5=QLineEdit()
e5.setEchoMode(QLineEdit.Password)
flo.addRow("Password",e5)
#只读模式
e6=QLineEdit("Hello")
e6.setReadOnly(True)
flo.addRow("Read Only",e6)
e5.editingFinished.connect(self.enterPress)
self.setLayout(flo)
def textchange(self,text):
print("输入的内容为"+text)
def enterPress(self):
print("开始执行")
if __name__=='__main__':
app=QApplication(sys.argv)
win=WinDemo()
win.show()
sys.exit(app.exec_())
QTextEdit(多行文本框)
QTextEdit是一个多行文本框控件,可以显示多行文本内容,当文本内容超过控件显示范围时,可以显示水平个垂直滚动条,除了可以显示文本,还可以显示HTML文档
实例
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QPushButton,QTextEdit
class TextDemo(QWidget):
def __init__(self,parent=None):
super(TextDemo,self).__init__(parent)
self.setWindowTitle("TextEdit实例")
flo=QVBoxLayout()
self.resize(300,270)
self.textEdit=QTextEdit()
self.btnPress1=QPushButton("显示文本")
self.btnPress2=QPushButton("显示HTML")
flo.addWidget(self.textEdit)
flo.addWidget(self.btnPress1)
flo.addWidget(self.btnPress2)
self.setLayout(flo)
#编辑按钮事件
self.btnPress1.clicked.connect(self.btnPress1_Clicked)
self.btnPress2.clicked.connect(self.btnPress2_Clicked)
#设置编辑框中预显示的文本
def btnPress1_Clicked(self):
self.textEdit.setPlainText("Hello!\n单击按钮")
def btnPress2_Clicked(self):
#font标签,规定html字体、大小和颜色:
self.textEdit.setHtml("<font color='red' size='6'><red>Hello!\n单击按钮。</font>")
if __name__=='__main__':
app=QApplication(sys.argv)
win=TextDemo()
win.show()
sys.exit(app.exec_())
PS:观察上面的程序,注意到,在类中有的程序用到了self,有的则没有
而决定是否加self,则主要看变量在类中的作用,如果作为全局变量,那么就加self,而如果只是局部变量,就可考虑不加