婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PyQt5實現QLineEdit正則表達式輸入驗證器

PyQt5實現QLineEdit正則表達式輸入驗證器

熱門標簽:京華圖書館地圖標注 電話機器人貸款詐騙 佛山通用400電話申請 看懂地圖標注方法 打印谷歌地圖標注 蘇州人工外呼系統軟件 淮安呼叫中心外呼系統如何 電話外呼系統招商代理 廣東旅游地圖標注

本文主要介紹了QLineEdit正則表達式輸入驗證器,分享給大家,具體如下:

from PyQt5 import QtWidgets, QtCore, QtGui, Qt
import re

############## QLineEdit正則表達式輸入驗證器
class LineEditRegExpValidator(QtGui.QValidator):

  '''
  # 默認為科學計數法輸入驗證器

  用法
  SciNotValidator = LineEditRegExpValidator() # 創建一個QLineEdit正則表達式輸入驗證器的類,默認為科學計數法輸入驗證器

  self.LineEdit1.setValidator(SciNotValidator) # 設置驗證器(啟用)
  self.LineEdit1.installEventFilter(SciNotValidator) # QLineEdit清空內容且游標失焦時,自動填充上一次的字符串內容

  self.LineEdit2.setValidator(SciNotValidator)
  self.LineEdit2.installEventFilter(SciNotValidator)

  self.LineEdit3.setValidator(SciNotValidator)
  self.LineEdit3.installEventFilter(SciNotValidator)

  Validator.validate() is abstract and must be overriddenValidator.validate() is abstract and must be overridden
  '''

  def __init__(
    self, 

    # 編輯狀態框輸入結束允許的字符串
    fullPatterns=[
      r"[+|-]?[0-9]+\.?[0-9]*(?:[Ee][+|-]?[0-9]+)?", 
      r'[+|-]{0,1}nan', r'[+|-]{0,1}inf'
      ], 
    
    # 編輯狀態框輸入尚未結束允許的字符串
    partialPatterns=[
      r'[+|-]?[0-9]+\.?[0-9]*(?:[Ee][+|-]?)?', 
      r'-', 
      r'\+', 
      r'[+|-]{0,1}nan', 
      r'[+|-]{0,1}na', 
      r'[+|-]{0,1}n', 
      r'[+|-]{0,1}inf', 
      r'[+|-]{0,1}in', 
      r'[+|-]{0,1}i'
      ],
    
    fixupString='1.0'
    ):

    super(LineEditRegExpValidator, self).__init__()
    self.fullPatterns = fullPatterns
    self.partialPatterns = partialPatterns
    self.fixupString = fixupString
  

  # 實時監聽文本框的改變
  # 可能是鍵盤單個字符'n'輸入, 也有可能是粘貼多個字符'nan'輸入
  def validate(self, string, pos) -> QtGui.QValidator.State: # string為編輯狀態框中可見的字符串+輸入字符/字符串

    # 編輯過程結束,若返回True,將編輯狀態框中的字符串填入LineEdit,若返回Flase則自動調用self.fixup方法,將fixup方法返回的字符串填入LineEdit
    if self.acceptable_check(string):
      #print(f'QtGui.QValidator.Acceptable:{QtGui.QValidator.Acceptable}')
      return QtGui.QValidator.Acceptable, string, pos # QtGui.QValidator.Acceptable = 2; 
    

    # 編輯過程中允許出現的字符串
    if self.intermediate_check(string):
      #print(f'QtGui.QValidator.Intermediate:{QtGui.QValidator.Intermediate}')
      return QtGui.QValidator.Intermediate, string, pos # QtGui.QValidator.State = 1;
    # 編輯過程中不允許出現的字符串(本次輸入的單個字符或字符串無效)
    else:
      #print(f'QtGui.QValidator.Invalid:{QtGui.QValidator.Invalid}')
      return QtGui.QValidator.Invalid, string, pos


  # 編輯狀態框驗證通過, 編輯狀態框單個字輸入符成功
  def acceptable_check(self, string) -> bool:
    True_ = 0
    for fullPattern in self.fullPatterns:
      if re.fullmatch(fullPattern, string):
        True_ += 1
      else:
        continue
    if True_ != 0:
      return True
    else:
      return False

  # 輸入還未結束允許的字符串
  def intermediate_check(self, string): #-> bool;  string為編輯狀態框中可見的字符串
    """
    Checks if string makes a valid partial float, keeping in mind locale dependent decimal separators.
    """
    if string == '':
      return True
    for partialPattern in self.partialPatterns:
      if re.fullmatch(partialPattern, string):
        return True
      else:
        pass

  # 
  def eventFilter(self, lineEdit, event): # -> bool
    # FocusIn event
    # 每當fous in時,更新LineEditRegExpValidator的fixupString
    # 輸入驗證器
    '''
    SciNotValidator = LineEditRegExpValidator()

    self.LineEdit1.setValidator(SciNotValidator)
    self.LineEdit1.installEventFilter(SciNotValidator)
    '''

    if event.type() == QtCore.QEvent.FocusIn:
      # do custom stuff
      # print('focus in')

      # self.lineEdit_zhuansu.installEventFilter(SciNotValidator), 在本類中,widget是self.lineEdit,執行函數self.lineEdit.text(), 其它類不一定有text()方法

      #lineEdit.selectAll()
      QtCore.QTimer.singleShot(0, lineEdit.selectAll) # 0ms
      self.fixupString = lineEdit.text()

      #print(self.fixupString)
      # return False so that the lineEdit will also handle the event
      # otherwise it won't focus out
      return False
    else:
      # we don't care about other events
      return False

  # 重寫QValidator的fixup(str)方法。可以在切換焦點后,直接修改不合規則的字符串。參數str是經過validate()方法驗證后的字符串;
  def fixup(self, string) -> str:
    """
    Fixes up input text to create a valid float. Puts an empty string on failure.
    """
    print(string)

    True_ = 0
    for fullPattern in self.fullPatterns:
      if re.fullmatch(fullPattern, string):
        True_ += 1
      else:
        continue
    if True_ != 0:
      return string
    else:
      return self.fixupString


# listWidget、tableWidget輸入數據檢查
class LineEditDelegate_Regx(QtWidgets.QStyledItemDelegate):
 # 科學計數法正則表達式
  regx = r"-?\ *[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?" #
  """
  -?    optionally matches a negative sign (zero or one negative signs)
  \ *    matches any number of spaces (to allow for formatting variations like - 2.3 or -2.3)
  [0-9]+  matches one or more digits
  \.?    optionally matches a period (zero or one periods)
  [0-9]*  matches any number of digits, including zero
  (?: ... ) groups an expression, but without forming a "capturing group" (look it up)
  [Ee]   matches either "e" or "E"
  \ *    matches any number of spaces (to allow for formats like 2.3E5 or 2.3E 5)
  -?    optionally matches a negative sign
  \ *    matches any number of spaces
  [0-9]+  matches one or more digits
  ?     makes the entire non-capturing group optional (to allow for the presence or absence of the exponent - 3000 or 3E3

  https://stackoverflow.com/questions/18152597/extract-scientific-number-from-string
  """

  """
  用法:
  def __init__(self, parent=None):
    super(NewClassName, self).__init__(parent)
    self.setupUi(self)

    delegate = LineEditDelegate_Regx(regx=None)
    self.listWidget_ShuZhiLieBiao.setItemDelegate(delegate)
    self.tableWidget.setItemDelegate(delegate)
  """
  def __init__(self, regx=None, parent=None):
    super(LineEditDelegate_Regx, self).__init__(parent)
    if regx == None:
      pass
    else:
      self.regx = regx

  # 方法重寫
  def createEditor(self, parent, option, index): # self, parent, option, index四個參數均不能少
    editor_qlineedit = QtWidgets.QLineEdit(parent)
    #SciNotValidator = QtGui.QRegExpValidator(QtCore.QRegExp(self.regx))
    SciNotValidator = LineEditRegExpValidator()
    editor_qlineedit.setValidator(SciNotValidator)
    return editor_qlineedit # LineEditDelegate_Regx(regx=None, parent=None), QStyledItemDelegate(parent: QObject = None)

"""
# LineEdit輸入數據檢查
def LineEditInputChecking(lineEdit, regx=None):
  '''
  用法:
  LineEditInputChecking(lineEdit=self.lineEdit_zhuansu)
  '''
  if regx == None:
    regx = r"-?\ *[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?"
  reg_ex = QtCore.QRegExp(regx)
  input_validator = QtGui.QRegExpValidator(reg_ex, lineEdit)
  lineEdit.setValidator(input_validator)
"""

參考:

https://stackoverflow.com/questions/39202697/qt-qlineedit-input-validation

https://stackoverflow.com/questions/15829782/how-to-restrict-user-input-in-qlineedit-in-pyqt

到此這篇關于PyQt5實現QLineEdit正則表達式輸入驗證器的文章就介紹到這了,更多相關PyQt5 QLineEdit驗證器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PyQt5 QLineEdit輸入的子網字符串校驗QRegExp實現
  • PyQt5 文本輸入框自動補全QLineEdit的實現示例
  • python GUI庫圖形界面開發之PyQt5單行文本框控件QLineEdit詳細使用方法與實例
  • PyQt5實現QLineEdit添加clicked信號的方法
  • 在pyqt5中QLineEdit里面的內容回車發送的實例

標簽:呼和浩特 江蘇 衡水 中山 畢節 駐馬店 湖州 股票

巨人網絡通訊聲明:本文標題《PyQt5實現QLineEdit正則表達式輸入驗證器》,本文關鍵詞  PyQt5,實現,QLineEdit,正則,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PyQt5實現QLineEdit正則表達式輸入驗證器》相關的同類信息!
  • 本頁收集關于PyQt5實現QLineEdit正則表達式輸入驗證器的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美特级限制片免费在线观看| 欧美视频日韩视频在线观看| 国内精品国产成人国产三级粉色| 国产iv一区二区三区| 欧美三级视频在线观看| 2023国产精品| 日本中文字幕一区二区视频| 国产精品一区二区三区乱码| 日韩欧美在线一区二区三区| 亚洲私人影院在线观看| 一区二区三区四区国产精品| 黑人精品欧美一区二区蜜桃| 欧美视频一区在线观看| 国产日产欧产精品推荐色| 免费高清在线一区| 在线免费不卡电影| 亚洲视频在线观看三级| 久久久久久久久97黄色工厂| 精品在线一区二区三区| gogogo免费视频观看亚洲一| 色综合激情久久| 日韩欧美不卡在线观看视频| av资源站一区| 亚洲色图视频网站| 久久先锋影音av鲁色资源网| 亚洲午夜免费福利视频| 国产精品一品二品| 久久久亚洲国产美女国产盗摄 | 欧美女孩性生活视频| 欧美一区二区三区电影| 国产精品视频一区二区三区不卡| 久久国产精品露脸对白| 91九色02白丝porn| 欧美日韩国产天堂| 肉丝袜脚交视频一区二区| 日韩在线一二三区| 久久精品一区八戒影视| 成人免费看片app下载| 美女视频黄 久久| 亚洲免费看黄网站| 国产麻豆视频精品| 26uuu另类欧美亚洲曰本| 久久精品国产成人一区二区三区 | 日韩中文字幕一区二区三区| 亚洲国产日韩综合久久精品| 亚洲18色成人| 欧美一级一级性生活免费录像| 不卡电影免费在线播放一区| 最新高清无码专区| 欧美日韩另类国产亚洲欧美一级| 欧美aaaaa成人免费观看视频| 久久精品亚洲精品国产欧美kt∨| 91性感美女视频| 秋霞影院一区二区| 欧美国产日韩在线观看| 欧美三级电影在线看| 狠狠色丁香婷婷综合久久片| 日韩欧美色电影| 国产欧美综合在线| 欧美怡红院视频| 麻豆久久一区二区| 国产精品久久影院| 欧美精品久久99| 成人激情免费电影网址| 日韩**一区毛片| 亚洲欧美日韩小说| 国产亚洲欧美日韩在线一区| 在线播放视频一区| 99re热这里只有精品视频| 久久精品国产亚洲5555| 夜夜嗨av一区二区三区中文字幕 | 亚洲理论在线观看| 91精品国产综合久久精品app| 成人网页在线观看| 久久99国产精品麻豆| 亚洲丰满少妇videoshd| 国产精品看片你懂得| 日韩三级视频中文字幕| 色婷婷综合久久久中文一区二区| 久久99这里只有精品| 香蕉乱码成人久久天堂爱免费| |精品福利一区二区三区| 欧美成人女星排名| 91成人国产精品| 99国内精品久久| 99久久99久久免费精品蜜臀| 国产精一区二区三区| 韩国精品一区二区| 久草中文综合在线| 久久久综合网站| 日韩欧美成人激情| 日韩视频国产视频| 成人av电影免费在线播放| 成人综合婷婷国产精品久久| 国产精品一品二品| 岛国精品在线播放| 日日摸夜夜添夜夜添精品视频| 久久久久久9999| 欧美男男青年gay1069videost| 成人永久免费视频| 最新欧美精品一区二区三区| 99这里只有精品| 精品一区在线看| 亚洲国产另类av| 亚洲欧美色综合| 中文字幕亚洲成人| 欧美一区二区在线视频| 91精品国产欧美日韩| 91视视频在线直接观看在线看网页在线看| 国产专区欧美精品| 国产精品主播直播| 一区在线播放视频| 亚洲一区二区在线播放相泽| 亚洲高清免费视频| 人妖欧美一区二区| 国产精品77777| 色琪琪一区二区三区亚洲区| 欧美日韩精品免费| 亚洲精品在线一区二区| 国产蜜臀av在线一区二区三区| 亚洲三级视频在线观看| 婷婷开心久久网| 国产成人免费在线观看| 欧美亚洲禁片免费| 欧美精品一区二区高清在线观看 | 国产精品资源站在线| 日韩电影免费在线观看网站| 国产成人精品免费视频网站| 91免费看`日韩一区二区| 欧美色精品天天在线观看视频| 亚洲免费视频中文字幕| 亚洲色图欧洲色图婷婷| 午夜天堂影视香蕉久久| 成人网在线免费视频| 欧美日韩一二三区| 在线免费一区三区| 91天堂素人约啪| 久久久五月婷婷| 亚洲国产精品综合小说图片区| 夫妻av一区二区| 欧美videos中文字幕| 一区二区三区国产精品| 国产在线精品不卡| 欧美专区亚洲专区| www国产精品av| 国产乱妇无码大片在线观看| 99国产精品国产精品毛片| 日韩欧美激情一区| 国产目拍亚洲精品99久久精品| 视频在线观看国产精品| 99在线视频精品| 国产精品毛片久久久久久久| 亚洲天堂2014| 日韩av中文字幕一区二区三区| 国产一区二区三区黄视频| 91精品午夜视频| 亚洲综合视频在线观看| 91网站最新网址| 亚洲欧洲成人精品av97| 成人av在线一区二区三区| 欧美精品xxxxbbbb| 亚洲国产精品一区二区www在线| 久久精品理论片| 91精品国产综合久久久蜜臀图片 | 欧美日韩一区二区三区四区| 亚洲乱码国产乱码精品精98午夜 | 日本一二三四高清不卡| 欧日韩精品视频| 亚洲国产综合91精品麻豆| 色婷婷综合五月| 亚洲午夜一区二区| 日本高清成人免费播放| 一区二区三区四区在线免费观看| 91蜜桃婷婷狠狠久久综合9色| 亚洲桃色在线一区| 91福利小视频| 成人av在线播放网址| 中文字幕一区av| 婷婷丁香激情综合| 日韩一区二区三区四区五区六区 | 亚洲国产精品高清| 成人精品视频一区| 一区二区三区不卡视频| 欧美美女网站色| 国产在线国偷精品产拍免费yy| www亚洲一区| 成人免费毛片aaaaa**| 一区二区三区资源| 欧美午夜一区二区| 综合激情成人伊人| 激情综合色丁香一区二区| 91精品国产91综合久久蜜臀| 欧美一区二区在线免费观看| 国内精品伊人久久久久影院对白| 国产精品午夜久久| 国产精品一区不卡| 国产喂奶挤奶一区二区三区| 处破女av一区二区| 午夜视频一区二区| 欧美大白屁股肥臀xxxxxx|