在QTableView里调整显示效果的方法
来源:互联网 发布:java工程师具备的条件 编辑:程序博客网 时间:2024/05/16 06:45
如果打算使用QTableView和QSqlTableModel组合读取数据库,并在视图层面显示带千位分隔符数字和调整对齐的话
需要重写的是QSqlTableModel的data方法
from PyQt5.QtCore import Qt, QVariantfrom PyQt5.QtSql import QSqlTableModelclass 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, QStyledItemDelegatefrom PyQt5.QtGui import QRegExpValidatorfrom PyQt5.QtCore import Qt, QRegExpclass 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())
阅读全文
0 0
- 在QTableView里调整显示效果的方法
- 在QTableView中简单的显示tool tip
- 将Qtableview中的数据显示在相应的控件上
- 在QTableView中不使用委托插入checkbox的方法
- QT学习笔记-31.QTABLEVIEW只显示横格,不显示点击虚框的方法
- QTableView自动调整列宽行高
- qtableview代理类,不需要双击就能显示效果
- Qt中实时将Qtableview中的内容显示在相应的控件上
- QTableView是显示表格状的视图
- eclipse4.5在Linux下标题栏显示过大的调整方法
- APK安装后在桌面的图标列表里不显示/显示的方法
- 崩坏学园3里离摄像机近距离的头发透明效果在unity里的实现方法
- 崩坏学园3里离摄像机近距离的头发透明效果在unity里的实现方法
- QTableView用鼠标选择行列的方法
- QTableView单行不允许编辑的方法
- 修改qt QTableView里的modal数据并更新数据
- Qt QTableView 如何清理列表里的数据
- Fieldset,一个不常用的HTML标签 (表单分组实现效果,象Winfrom 里的GroupBox 在左上角显示标题.)
- mybatis 联合查询2
- CF891E,奇妙的计数题
- 斐波那契数列 python实现
- 设计模式--结构型
- 摩尔定律
- 在QTableView里调整显示效果的方法
- 网易2018校园招聘:游历魔法王国 [python]
- Python 数据处理实践(1)--文件读取
- 程序员你为什么这么累?
- POJ-1458-Common Subsequence-经典DP
- 线性代数2——矩阵消元
- 2017秋招 百度前端一面面经
- 表视图 设置 回弹、不显示多余的行、表头表尾跟随
- spark2.2.0 SBT配置