pyQt:在QTableView中使用委托限制表格输入

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 13:26   223   0

需求:

使用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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP