如何在python中将QWidgeTable中的列设置为记帐格式?
我有一个如何在python中将QWidgeTable中的列设置为记帐格式?,python,datatable,format,pyqt5,qwidget,Python,Datatable,Format,Pyqt5,Qwidget,我有一个qwidgetable,我想将特定列(我称之为“金额”列)设置为记帐格式,如果我在离开该单元格并转到另一个单元格后键入例如1000将转到1000.00。我在网上查了一下,但找不到对这个问题的具体答复。事先非常感谢你 我实际上试过这段代码,但我不知道如何完成: self.table_data.setItemDelegateForColumn() 编辑: 这是我的密码: import sys from PyQt5 import QtWidgets, QtCore class Window
qwidgetable
,我想将特定列(我称之为“金额”列)设置为记帐格式,如果我在离开该单元格并转到另一个单元格后键入例如1000
将转到1000.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()
这就是它看起来的样子:
我想要达到的是当我在产品1中放入1000。在我离开该单元后,该值将自动变为1000.00
不是这样的:
但就像这样:(这只是excel格式的snasphot):
QStyledItemDelegate类
QStyledItemDelegate类为模型中的数据项提供显示和编辑功能
导入系统
从PyQt5导入QtWidgets、QtCore
类InitialDelegate(QtWidgets.QStyledItemDelegate):
def uuu init uuuu(self,小数,parent=None):
super()。\uuuu init\uuuu(父级)
self.nDecimals=小数
def initStyleOption(self、option、index):
super().initStyleOption(选项,索引)
option.displayAlignment=QtCore.Qt.AlignCenter
尝试:
text=index.model().data(index,QtCore.Qt.DisplayRole)
数字=浮动(文本)
option.text=“{:,.{}f}”。格式(数字,self.nDecimals)
除:
通过
类窗口(QtWidgets.QMainWindow):
定义初始化(自):
超级(窗口,自我)。\uuuu初始化
自身设置几何(50,50500500)
self.setWindowTitle('PyQt Tuts')
self.table()
def表(自身):
self.tableWidget=qtwidts.QTableWidget()
self.tableWidget.setGeometry(QtCore.QRect(220100411392))
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(5)
delegateFloat=InitialDelegate(2,self.tableWidget)#请提供一个Hi-Nick。为了清楚起见,我编辑了我的问题。希望你能对此作出回应。非常感谢,非常感谢,尼克!这正是我需要的。很高兴我把这个带到这里来。我只想补充一点,就是对齐。如何以货币格式对齐?像在中间对齐吗?我试着用正确的方式改变它option.displayAlignment=QtCore.Qt.AlignRight“”,但默认情况下,它似乎在topright对齐中起作用。谢谢。@AlvinLorejas
option.displayAlignment=QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter
。如果我的答案对你有帮助,那么别忘了标记为正确,如果你不知道如何做,那么请检查“是”,这正是我需要的。非常感谢你的帮助,尼克!
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()