PyQt5?QLineEdit校驗(yàn)器限制輸入實(shí)例代碼
校驗(yàn)器含義
Qvalidator 校驗(yàn)器用于檢驗(yàn)用戶輸入的數(shù)據(jù)的合法性。如果一個(gè)輸入框設(shè)置了校驗(yàn)器,到時(shí)用戶在文本框中輸入內(nèi)容時(shí),首先會將內(nèi)容傳遞給驗(yàn)證器進(jìn)行驗(yàn)證,如果輸入框結(jié)束輸入后,上述的驗(yàn)證狀態(tài)并非有效,則不允許輸入。
編輯框或者其他輸入控件 可以通過類似于SetValidator來指定驗(yàn)證器。
QValidator 是一個(gè)抽象類,有一些子類:
- QIntValidator設(shè)置合法 int
- 可以設(shè)置其range,setRange()
- QDoubleValidator 設(shè)置合法 Double
- 可以設(shè)置range setRange, ,小數(shù)點(diǎn)后位數(shù)setDecimals
- QRegExpValidator 是用來結(jié)合正則表達(dá)式,判斷合法性
-利用正則表達(dá)式自由發(fā)揮- QRegExp, PyQt中的正則表達(dá)式類,設(shè)置正則表達(dá)式對象
- setRegExp,指定校驗(yàn)器的正則表達(dá)式
系統(tǒng)校驗(yàn)器子類舉例
from PyQt5.QtWidgets import * from PyQt5.QtGui import QIntValidator, QDoubleValidator, QRegExpValidator from PyQt5.QtCore import QRegExp import sys class QLineEditorValidator(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("校驗(yàn)器") form_layout = QFormLayout() int_line = QLineEdit() double_line = QLineEdit() re_line = QLineEdit() int_line.setPlaceholderText("整形數(shù)據(jù)") double_line.setPlaceholderText("浮點(diǎn)數(shù)據(jù)") re_line.setPlaceholderText("正則數(shù)據(jù)") form_layout.addRow("整形數(shù)據(jù)", int_line) form_layout.addRow("浮點(diǎn)數(shù)據(jù)", double_line) form_layout.addRow("正則數(shù)據(jù)", re_line) int_validator = QIntValidator() int_validator.setRange(1, 10) double_validator = QDoubleValidator() double_validator.setRange(-360, 360) double_validator.setDecimals(2) re_validator = QRegExpValidator() reg = QRegExp("^[a-zA-Z0-9]+$") re_validator.setRegExp(reg) int_line.setValidator(int_validator) double_line.setValidator(double_validator) re_line.setValidator(re_validator) if __name__ == "__main__": app = QApplication(sys.argv) win = QLineEditorValidator() win.show() sys.exit(app.exec_())
自定義抽象類
由于 QValidator 有一個(gè)純虛函數(shù) validate.所以必須要寫一個(gè)類來繼承,然后實(shí)現(xiàn)這個(gè)純虛函數(shù)才行。
def validate(self, input_str, input_int): # input_str是輸入的內(nèi)容 # input_int是光標(biāo)的位置 ....
返回State有三種狀態(tài)
- QValidator.Invalid:輸入是不允許的
- QValidator.Intermediate ,處在中間狀態(tài),還無法判斷。需要后續(xù)。
- QValidator.Acceptable,輸入是允許的
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("驗(yàn)證器的使用") self.resize(500, 500) self.setup_ui() def setup_ui(self): le = QLineEdit() le.move(100, 100) # 18-180 # QValidator不能直接用,而是用一個(gè)子類來繼承,然后實(shí)體化 # 因此上面寫了一個(gè)新的AgeValidator繼承于QValidator validator1 = ScoreValidator() le.setValidator(validator1) le2 = QLineEdit() le2.move(200, 200) fm_layout = QFormLayout(self) fm_layout.addRow("輸入年齡", le) fm_layout.addRow("打醬油行", le2) class ScoreValidator(QValidator): def validate(self, input_str, input_int): # input_str: 輸入框中的已有內(nèi)容 # input_int: 光標(biāo)的位置 print(f"當(dāng)前數(shù)值是:{input_str}, 是第{input_int}個(gè)字符") try: if 60 <= int(input_str) <= 100: # 需要有一個(gè)返回值 return QValidator.Acceptable, input_str, input_int # 返回驗(yàn)證通過 elif 5 <= int(input_str) < 60: return QValidator.Intermediate, input_str, input_int # 返回驗(yàn)證中間狀態(tài),不做響應(yīng) else: return QValidator.Invalid, input_str, input_int # 返回驗(yàn)證不通過 except: if len(input_str) == 0: return QValidator.Intermediate, input_str, input_int # 返回驗(yàn)證中間狀態(tài),不做響應(yīng) return QValidator.Invalid, input_str, input_int # 返回驗(yàn)證不通過 # 方便在模板里進(jìn)行調(diào)試 if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
總結(jié)
到此這篇關(guān)于PyQt5 QLineEdit校驗(yàn)器限制輸入的文章就介紹到這了,更多相關(guān)PyQt5 QLineEdit校驗(yàn)器限制輸入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中利用numpy.array()實(shí)現(xiàn)倆個(gè)數(shù)值列表的對應(yīng)相加方法
今天小編就為大家分享一篇python中利用numpy.array()實(shí)現(xiàn)倆個(gè)數(shù)值列表的對應(yīng)相加方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python 把數(shù)據(jù) json格式輸出的實(shí)例代碼
下面小編就為大家?guī)硪黄猵ython 把數(shù)據(jù) json格式輸出的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10教你如何將 Sublime 3 打造成 Python/Django IDE開發(fā)利器
Sublime Text 是一款非常強(qiáng)大的文本編輯器, 下面我們介紹如何將 Sublime Text 3 打造成一款 Python/Django 開發(fā)利器:2014-07-07python中關(guān)于for循環(huán)的碎碎念
這篇文章主要介紹了python中關(guān)于for循環(huán)使用過程中的碎碎念,需要的朋友可以參考下2017-06-06PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例
今天小編就為大家分享一篇PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05