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''' 但默认情况下它似乎在右上角对齐中起作用。谢谢。 @AlvinLorejasoption.displayAlignment = QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter
。如果我的回答对您有所帮助,请不要忘记标记为正确,如果您不知道该怎么做,请查看***.com/tour
是的,这就是我需要的。非常感谢尼克的帮助!以上是关于python - 如何将qwidgettable中的列设置为python中的会计格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
python中,如何将字符串中的多个不等量空格改为改为逗号分隔?