PyQt5?QLineEdit校驗器限制輸入實例代碼
校驗器含義
Qvalidator 校驗器用于檢驗用戶輸入的數(shù)據(jù)的合法性。如果一個輸入框設(shè)置了校驗器,到時用戶在文本框中輸入內(nèi)容時,首先會將內(nèi)容傳遞給驗證器進行驗證,如果輸入框結(jié)束輸入后,上述的驗證狀態(tài)并非有效,則不允許輸入。
編輯框或者其他輸入控件 可以通過類似于SetValidator來指定驗證器。
QValidator 是一個抽象類,有一些子類:
- QIntValidator設(shè)置合法 int
- 可以設(shè)置其range,setRange()
- QDoubleValidator 設(shè)置合法 Double
- 可以設(shè)置range setRange, ,小數(shù)點后位數(shù)setDecimals
- QRegExpValidator 是用來結(jié)合正則表達式,判斷合法性
-利用正則表達式自由發(fā)揮- QRegExp, PyQt中的正則表達式類,設(shè)置正則表達式對象
- setRegExp,指定校驗器的正則表達式
系統(tǒng)校驗器子類舉例
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("校驗器")
form_layout = QFormLayout()
int_line = QLineEdit()
double_line = QLineEdit()
re_line = QLineEdit()
int_line.setPlaceholderText("整形數(shù)據(jù)")
double_line.setPlaceholderText("浮點數(shù)據(jù)")
re_line.setPlaceholderText("正則數(shù)據(jù)")
form_layout.addRow("整形數(shù)據(jù)", int_line)
form_layout.addRow("浮點數(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 有一個純虛函數(shù) validate.所以必須要寫一個類來繼承,然后實現(xiàn)這個純虛函數(shù)才行。
def validate(self, input_str, input_int):
# input_str是輸入的內(nèi)容
# input_int是光標的位置
....返回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("驗證器的使用")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
le = QLineEdit()
le.move(100, 100)
# 18-180
# QValidator不能直接用,而是用一個子類來繼承,然后實體化
# 因此上面寫了一個新的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: 光標的位置
print(f"當前數(shù)值是:{input_str}, 是第{input_int}個字符")
try:
if 60 <= int(input_str) <= 100:
# 需要有一個返回值
return QValidator.Acceptable, input_str, input_int # 返回驗證通過
elif 5 <= int(input_str) < 60:
return QValidator.Intermediate, input_str, input_int # 返回驗證中間狀態(tài),不做響應(yīng)
else:
return QValidator.Invalid, input_str, input_int # 返回驗證不通過
except:
if len(input_str) == 0:
return QValidator.Intermediate, input_str, input_int # 返回驗證中間狀態(tài),不做響應(yīng)
return QValidator.Invalid, input_str, input_int # 返回驗證不通過
# 方便在模板里進行調(diào)試
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
總結(jié)
到此這篇關(guān)于PyQt5 QLineEdit校驗器限制輸入的文章就介紹到這了,更多相關(guān)PyQt5 QLineEdit校驗器限制輸入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?tkinter自定義實現(xiàn)Expander控件
和其他成熟的GUI庫相比,tkinter的組件并不是太多,但在自定義組件這一點上,并不遜色于其他框架,下面小編就教大家如何自定義一個Expander控件吧2023-08-08
Python 運行 shell 獲取輸出結(jié)果的實例
今天小編就為大家分享一篇Python 運行 shell 獲取輸出結(jié)果的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
在Python的Django框架中用流響應(yīng)生成CSV文件的教程
這篇文章主要介紹了在Python的Django框架中用流響應(yīng)生成CSV文件的教程,作者特別講到了防止CSV文件中的中文避免出現(xiàn)亂碼等問題,需要的朋友可以參考下2015-05-05
Django與AJAX實現(xiàn)網(wǎng)頁動態(tài)數(shù)據(jù)顯示的示例代碼
這篇文章主要介紹了Django與AJAX實現(xiàn)網(wǎng)頁動態(tài)數(shù)據(jù)顯示的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
wxPython繪圖模塊wxPyPlot實現(xiàn)數(shù)據(jù)可視化
這篇文章主要為大家詳細介紹了wxPython繪圖模塊wxPyPlot實現(xiàn)數(shù)據(jù)可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
Python內(nèi)置函數(shù)Type()函數(shù)一個有趣的用法
這篇文章主要介紹了Python內(nèi)置函數(shù)Type()函數(shù)一個有趣的用法,本文講解的是個人發(fā)現(xiàn)在的一個有趣的用法,注意這種寫法會導致代碼很難讀,需要的朋友可以參考下2015-02-02

