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,而如果只是局部變量,就可考慮不加