功能:
1.限制输入特殊字符,输入自动删除并提示
2.限制输入关键字,输入修改字体颜色会红色并提示
效果图:
代码:
import re
import os
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout, QToolTip, QLabel, QMessageBox
from PyQt5.QtGui import QPalette, QColor, QFont
from PyQt5.QtCore import Qt
def is_valid_filename(filename):
"""
检查文件名是否有效
"""
if len(filename) > 255:
return "文件名长度不能超过 255 个字符"
if filename.endswith(' '):
return "文件名不能以空格结尾"
if filename.startswith('.'):
return "文件名不能以句点开头"
invalid_chars = r'[\\/:*?"<>|]'
if re.search(invalid_chars, filename):
return "文件名不能包含以下任何字符:\\ / : * ? \" < > |"
reserved_names = {'CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5',
'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4',
'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'}
if os.name == 'nt' and filename.upper() in reserved_names:
return "文件名不能使用以下保留字符来命名文件:CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9"
return ""
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.lineedit = QLineEdit(self)
vbox = QVBoxLayout(self)
vbox.addWidget(self.lineedit)
self.lineedit.textChanged.connect(self.check_filename)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Filename Validator')
self.show()
def check_filename(self, text):
errormsg = is_valid_filename(text)
if errormsg:
QToolTip.setFont(QFont("SansSerif", 10))
QToolTip.showText(self.lineedit.mapToGlobal(self.lineedit.rect().bottomLeft()), errormsg)
palette = QPalette()
palette.setColor(QPalette.Text, QColor(Qt.red))
self.lineedit.setPalette(palette)
valid_text = re.sub(r'[\\/:*?"<>|]', '', text)
if valid_text != text:
self.lineedit.setText(valid_text)
else:
QToolTip.hideText()
palette = QPalette()
palette.setColor(QPalette.Text, Qt.black)
self.lineedit.setPalette(palette)
if __name__ == '__main__':
app = QApplication([])
ex = Example()
app.exec_()