Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将QWidgeTable中的列设置为记帐格式?_Python_Datatable_Format_Pyqt5_Qwidget - Fatal编程技术网

如何在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()