Change text color to red when the regex is not correct

updated everytime the text changes in the lineedit
This commit is contained in:
Jonathan Pietkiewicz 2022-01-25 21:57:54 -06:00
parent e0a3d01091
commit 23ded19d58

View file

@ -1,5 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# --!-- coding: utf8 --!-- # --!-- coding: utf8 --!--
import re
from PyQt5.QtCore import Qt, QRect, QEvent, QCoreApplication from PyQt5.QtCore import Qt, QRect, QEvent, QCoreApplication
from PyQt5.QtGui import QPalette, QFontMetrics, QKeySequence from PyQt5.QtGui import QPalette, QFontMetrics, QKeySequence
from PyQt5.QtWidgets import QWidget, qApp, QListWidgetItem, QStyledItemDelegate, QStyle, QLabel, QToolTip, QShortcut from PyQt5.QtWidgets import QWidget, qApp, QListWidgetItem, QStyledItemDelegate, QStyle, QLabel, QToolTip, QShortcut
@ -25,6 +27,7 @@ class search(QWidget, Ui_search):
self.setupUi(self) self.setupUi(self)
self.searchTextInput.returnPressed.connect(self.search) self.searchTextInput.returnPressed.connect(self.search)
self.searchTextInput.textChanged.connect(self.updateSearchFeedback)
self.searchMenu = searchMenu() self.searchMenu = searchMenu()
self.btnOptions.setMenu(self.searchMenu) self.btnOptions.setMenu(self.searchMenu)
@ -70,10 +73,30 @@ class search(QWidget, Ui_search):
if 0 < self.result.currentRow() < self.result.count(): if 0 < self.result.currentRow() < self.result.count():
self.openItem(self.result.currentItem()) self.openItem(self.result.currentItem())
def updateSearchFeedback(self, search_string):
palette = QPalette()
try:
self.compileRegex(search_string)
except Exception as e:
# From https://stackoverflow.com/questions/27432456/python-qlineedit-text-color
palette.setColor(QPalette.Text, Qt.red)
self.searchTextInput.setPalette(palette)
def prepareRegex(self, searchText): def prepareRegex(self, searchText):
import re
rtn = None rtn = None
try: try:
rtn = self.compileRegex(searchText)
except re.error as e:
LOGGER.info("Problem preparing regular expression: " + e.msg)
rtn = None
except Exception as e:
LOGGER.info("Problem preparing regular expression")
rtn = None
return rtn
def compileRegex(self, searchText):
# Intentionally throws exceptions for use elsewhere
flags = re.UNICODE flags = re.UNICODE
if self.searchMenu.caseSensitive() is False: if self.searchMenu.caseSensitive() is False:
@ -86,14 +109,7 @@ class search(QWidget, Ui_search):
# Source: https://stackoverflow.com/a/15863102 # Source: https://stackoverflow.com/a/15863102
searchText = r'\b' + searchText + r'\b' searchText = r'\b' + searchText + r'\b'
rtn = re.compile(searchText, flags) return re.compile(searchText, flags)
except re.error as e:
LOGGER.info("Problem preparing regular expression: " + e.msg)
rtn = None
except Exception as e:
LOGGER.info("Problem preparing regular expression")
rtn = None
return rtn
def search(self): def search(self):
self.result.clear() self.result.clear()