|
需求:
使用pyQT的MVC(View/Delegate)模型实现对单元格输入内容的限制,本例实现的是限制单元格的输入为double类型。
代码:
文件名delegate.py
from PyQt5 import QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QItemDelegate, QLineEdit
class DoubleOnlyDelegate(QItemDelegate):
def __init__(self, parent=None):
super(DoubleOnlyDelegate, self).__init__(parent)
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
editor = QLineEdit(QWidget)
editor.setValidator(QtGui.QDoubleValidator())
return editor
def setEditorData(self, lineEdit, QModelIndex):
text = QModelIndex.model().data(QModelIndex, Qt.EditRole)
lineEdit.setText(str(text))
def updateEditorGeometry(self, QWidget, QStyleOptionViewItem, QModelIndex):
QWidget.setGeometry(QStyleOptionViewItem.rect)
def setModelData(self, lineEditor, QAbstractItemModel, QModelIndex):
text = lineEditor.text()
QAbstractItemModel.setData(QModelIndex, text, Qt.EditRole)
使用:
ui文件ui.py,设置第二列的单元格只允许输入double类型
self.tableWidget = QtWidgets.QTableWidget(self.frame_2) # tableWidge嵌入到frame_2
# ...
self.tableWidget.setItemDelegateForColumn(1, DoubleOnlyDelegate(self.MainWindow)) # 设置delegate
总结这种方式不太好,因为输入框里面还是可以输入其他类型,只是写不进表格里面。
另:
除了限制double还可以使用正则匹配的方式,更多内容可以参考:
https://blog.csdn.net/lhchen922/article/details/38367719 |