在QTableView里调整显示效果的方法
2017-11-19 11:54
676 查看
如果打算使用QTableView和QSqlTableModel组合读取数据库,并在视图层面显示带千位分隔符数字和调整对齐的话
需要重写的是QSqlTableModel的data方法
如果打算在QTableView编辑数字的时候限制输入为可选千位分隔符的正负数字或空字符,并需要调整对齐的话,需要写一个QDelegate代理和新的输入框类并挂到QTableView上
需要重写的是QSqlTableModel的data方法
from PyQt5.QtCore import Qt, QVariant from PyQt5.QtSql import QSqlTableModel class ExampleTableModel(QSqlTableModel): def __init__(self, *args): super(ExampleTableModel, self).__init__(*args) def data(self, index, role=None): value = super(ExampleTableModel, self).data(index, role) if index.model().headerData(index.column(), 1) == "Amount" and role == Qt.TextAlignmentRole: return QVariant(int(Qt.AlignRight | Qt.AlignVCenter)) elif index.model().headerData(index.column(), 1) == "Amount" and role == Qt.DisplayRole: try: return f"{value:,.2f}" except: return value else: return value
如果打算在QTableView编辑数字的时候限制输入为可选千位分隔符的正负数字或空字符,并需要调整对齐的话,需要写一个QDelegate代理和新的输入框类并挂到QTableView上
from PyQt5.QtWidget import QLineEdit, QTableView, QStyledItemDelegate from PyQt5.QtGui import QRegExpValidator from PyQt5.QtCore import Qt, QRegExp class QAmountEdit(QLineEdit): """用于金额和增减值率""" def __init__(self, *args): super(QAmountEdit, self).__init__(*args) regex = QRegExp('^[+-]?(\d{1,3}(,\d{3})*|\d+)?(\.\d{0,2})?$') self.setValidator(QRegExpValidator(regex)) self.setAlignment(Qt.AlignRight | Qt.AlignVCenter) class ExampleDelegate(QStyledItemDelegate): def createEditor(self, parent, option, index): if index.model().headerData(index.column(), 1) == "Amount": editor = QAmountEdit(parent) else: editor = QLineEdit(parent) return editor def setEditorData(self, editor, index): data = index.model().data(index, Qt.EditRole) if isinstance(editor, QAmountEdit): try: editor.setText(f'{float(data):,.2f}') except: editor.setText(data) else: editor.setText(str(data)) def setModelData(self, editor, model, index): if isinstance(editor, QAmountEdit): value = float(editor.text().replace(",", "")) model.setData(index, value) else: model.setData(index, editor.text()) class ExampleTableView(QTableView): def __init__(self, *args): super(ExampleTableView, self).__init__(*args) self.setItemDelegate(ExampleDelegate())
相关文章推荐
- 解决 通过继承QAbstractTableModel并实现headerData方法给QTableView添加标题时,标题不显示 的问题
- 演示如何使用QTableView显示列表
- Android编程开发之TextView文字显示和修改方法(附TextView属性介绍)
- Qt之QTableView显示富文本
- DEDE列表翻页显示竖向效果,修改为横线显示效果的方法
- 通过SpannableString为TextView设置丰富的显示效果
- Android自定义View实现仿驾考宝典显示分数效果(收藏)
- FlycooLabelView显示角标效果
- QTableView的表格项中加入图标的方法(重载View::mouseMoveEvent,并使用View::setIconSize函数设置图标的大小)
- QT中,QTableView鼠标滑过某一item上时该item所在行的背景颜色变成其他颜色的实现方法
- 由于设计页面需要,要把两个并排显示的 div 实现一样高的效果, n 行 n 列布局,每列高度(事先并不能确定哪列的高度)相同,每个设计师追求的目标。方法有以下几种: 1 JS 实现(判断 2 个 d
- FlipDotView——磁翻点阵显示效果
- 调整tableView的section间距的方法
- ViewPager显示广告图片超简易使用方法
- android textview 显示html方法解析
- tableView设置cell高度及分组模式添加头与脚显示方法
- android imageview 图片不能正常显示 或不能自适应的解决方法
- 抽屉效果--第三方ViewDeck的使用方法
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- iOS-UIScrollview滑动时标题栏自动隐藏和显示效果