如何将qwidgettable中的列设置为python中的记帐格式?

问题描述 投票:1回答:1

我有一个qwidgettable,我想将特定的列(我称之为“金额”列)设置为会计格式,如果我键入Eg的话。我离开那个单元格并转到另一个单元格后,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()

这是它的外观:

enter image description here

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

不是这样:

enter image description here

但是像这样:(这只是Excel格式的快照):

enter image description here

python datatable format pyqt5 qwidget
1个回答
0
投票

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()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.