python - 如何将qwidgettable中的列设置为python中的会计格式? [复制]

Posted

技术标签:

【中文标题】python - 如何将qwidgettable中的列设置为python中的会计格式? [复制]【英文标题】:How to set a column in qwidgettable as accounting format in python? [duplicate] 【发布时间】:2020-05-15 21:00:20 【问题描述】:

我有一个qwidgettable,我想将特定列(我称之为“金额”列)设置为会计格式,如果我键入例如。在我离开那个牢房并转到另一个牢房后,1000 变成了 1,000.00。我查看了网络,但找不到对此查询的具体回复。非常感谢您。

我实际上尝试过这段代码,但我不知道如何完成这个:

self.table_data.setItemDelegateForColumn()

编辑:

这是我的代码:

import sys
from PyQt5 import QtWidgets, QtCore

class Window(QtWidgets.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50,500,500)
        self.setWindowTitle('PyQt Tuts')
        self.table()


    def table(self):

        self.tableWidget = QtWidgets.QTableWidget()
        self.tableWidget.setGeometry(QtCore.QRect(220, 100, 411, 392))
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(5)
        self.tableWidget.show()

        item = QtWidgets.QTableWidgetItem()
        item.setText("Amount")
        self.tableWidget.setHorizontalHeaderItem(1, item)

        attr = ['Product1', 'Product2', 'Product3', 'Product4', 'Product5']
        i = 0
        for j in attr:
            self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
            i += 1

def run():
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    sys.exit(app.exec_())

run()

这就是它的样子:

我想要实现的是当我将 1000 放入产品 1 中时。离开该单元格后,这将自动变为 1,000.00。

不是这样的:

但是像这样:(这只是一个 excel 格式的快照):

【问题讨论】:

请提供minimal reproducible example 嗨尼克。为了清楚起见,我编辑了我的问题。希望您能对此作出回应。非常感谢。 【参考方案1】:

QStyledItemDelegate 类

QStyledItemDelegate 类为模型中的数据项提供显示和编辑工具。

import sys
from PyQt5 import QtWidgets, QtCore


class InitialDelegate(QtWidgets.QStyledItemDelegate):
    def __init__(self, decimals, parent=None):
        super().__init__(parent)
        self.nDecimals = decimals

    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.displayAlignment = QtCore.Qt.AlignCenter
        try:
            text = index.model().data(index, QtCore.Qt.DisplayRole)
            number = float(text)
            option.text = ":,.f".format(number, self.nDecimals)
        except:
            pass


class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50,500,500)
        self.setWindowTitle('PyQt Tuts')
        self.table()

    def table(self):
        self.tableWidget = QtWidgets.QTableWidget()
        self.tableWidget.setGeometry(QtCore.QRect(220, 100, 411, 392))
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(5)

        delegateFloat = InitialDelegate(2, self.tableWidget)              # <---
        self.tableWidget.setItemDelegateForColumn(1, delegateFloat)       # <---
        
        self.tableWidget.show()

        item = QtWidgets.QTableWidgetItem()
        item.setText("Amount")
        self.tableWidget.setHorizontalHeaderItem(1, item)

        attr = ['Product1', 'Product2', 'Product3', 'Product4', 'Product5']
        i = 0
        for j in attr:
            self.tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
            i += 1


def run():
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    sys.exit(app.exec_())

run()

【讨论】:

非常感谢尼克!这正是我所需要的。很高兴我把这个带到这里。我只想添加的一件事是对齐。如何以货币格式对齐?喜欢在中间对齐?我尝试在 alignright 中更改它。 ''' option.displayAlignment = QtCore.Qt.AlignRight''' 但默认情况下它似乎在右上角对齐中起作用。谢谢。 @AlvinLorejas option.displayAlignment = QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter。如果我的回答对您有所帮助,请不要忘记标记为正确,如果您不知道该怎么做,请查看***.com/tour 是的,这就是我需要的。非常感谢尼克的帮助!

以上是关于python - 如何将qwidgettable中的列设置为python中的会计格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python中,如何将字符串中的多个不等量空格改为改为逗号分隔?

在python中,如何将一个字符串中的小写字母全部转换为大写?

python中如何将字符串转换为字典

如何将 SSML 合并到 Python 中

python如何将list中>0的元素打印出来

python中,如何将列表中的值,竖着存在csv文件中