我有一个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()
这是它的外观:
我想实现的是,当我将1000放入产品1中时,离开该单元格后,该值将自动变为1,000.00。
不是这样:
但是像这样:(这只是Excel格式的快照):
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()