一、项目地址

https://github.com/LinFeng-BingYi/DailyAccountBook

二、新增

1. 在表格中设置选项列表,让用户更快地编辑动账记录

1.1 功能详述

为表格中以下字段设置选项列表:

1. 需求强度(由"基本需求"更名)

温饱:基本维持生存且不铺张浪费的消费行为

小康:在温饱的基础上,可以使生活变得比较舒适的消费行为

奢华:可有可无的,或超出自身消费水平的消费行为



该属性意在于让用户更好地明白基本消费与超额消费占比,以便遏制不必要的消费行为

2. 类别(支出表、收入表)



计划在将来支持用户自定义支出或收入类别。目前写死在代码中,可以在CommonFiles/ConstArgs.py文件中修改后使用

3. 支出账户、收入账户、关联账户



计划在将来支持用户自定义账户列表。目前写死在代码中,可以在CommonFiles/ConstArgs.py文件中修改后使用

1.2 代码实现

思路分析

支出、收入、转移表格中的列名有大量重复,因此将所有列的初始化集中到一个函数中,根据列名执行对应初始化方式。同时,还要区分已存在记录的行和空白行。综上,实现了三个函数:

函数名 作用
setExistTableCell 为已存在记录的表格行设置单元格
setBlankTableCell 为表格的空白行设置单元格
getExistTableCell 获取某行记录的数据,组装成字典

代码

    def setExistTableCell(self, tableWidget, current_row, value_dict: dict, const_class):
"""
Describe: 为已存在记录的表格行设置单元格。根据列名设置对应类型(格式)的单元格 Args:
tableWidget: QTableWidget
涉及的表格
current_row: int
本条记录所在行号
value_dict: dict
记录字典
const_class: Union[ExpenseConst, IncomeConst, MovementConst]
记录类型对应的常量类
"""
keys_list = list(value_dict.keys())
for key, value in value_dict.items():
if key == 'necessity':
comboBox = ComboBoxInTableWidget(NECESSITY, value)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'value':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(str(value)))
elif key == 'category':
comboBox = ComboBoxInTableWidget(const_class.CATEGORY, value)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'detail':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(value))
elif key == 'describe':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(value))
elif key == 'from':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, value)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'to':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, value)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'associatedFund':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, value)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
else:
print("未知的记录属性!!")
return
tableWidget.setCellWidget(current_row, len(keys_list), self.buttonsForExistRow(tableWidget)) def setBlankTableCell(self, tableWidget, current_row, const_class):
"""
Describe: 为表格的空白行设置单元格。根据列名设置对应类型(格式)的单元格 Args:
tableWidget: QTableWidget
涉及的表格
current_row: int
本条记录所在行号
const_class: Union[ExpenseConst, IncomeConst, MovementConst]
记录类型对应的常量类
"""
keys_list = [const_class.TABLEWIDGET_COLUMN_HEAD[tableWidget.horizontalHeaderItem(i).text()] for i in range(tableWidget.columnCount()-1)]
for key in keys_list:
if key == 'necessity':
comboBox = ComboBoxInTableWidget(NECESSITY, 'True')
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'value':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(''))
elif key == 'category':
comboBox = ComboBoxInTableWidget(const_class.CATEGORY, 0)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'detail':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(''))
elif key == 'describe':
tableWidget.setItem(current_row, keys_list.index(key), QTableWidgetItem(' '))
elif key == 'from':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, 0)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'to':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, 0)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
elif key == 'associatedFund':
comboBox = ComboBoxInTableWidget(fundConst.CATEGORY, None)
tableWidget.setCellWidget(current_row, keys_list.index(key), comboBox)
else:
print("未知的记录属性!!: {}", format(key))
return
tableWidget.setCellWidget(current_row, len(keys_list), self.buttonsForNewRow(tableWidget)) def getExistTableCell(self, tableWidget, current_row, const_class):
new_data_dict = OrderedDict()
for i in range(tableWidget.columnCount() - 1):
key = const_class.TABLEWIDGET_COLUMN_HEAD[tableWidget.horizontalHeaderItem(i).text()]
if key == 'necessity':
comboBox: ComboBoxInTableWidget = tableWidget.cellWidget(current_row, i)
new_data_dict[key] = str(comboBox.getKeyByCurrentText())
elif key == 'value':
new_data_dict[key] = tableWidget.item(current_row, i).text()
elif key == 'category':
comboBox: ComboBoxInTableWidget = tableWidget.cellWidget(current_row, i)
new_data_dict[key] = str(comboBox.getKeyByCurrentText())
elif key == 'detail':
new_data_dict[key] = tableWidget.item(current_row, i).text()
elif key == 'describe':
new_data_dict[key] = tableWidget.item(current_row, i).text()
elif key == 'from':
comboBox: ComboBoxInTableWidget = tableWidget.cellWidget(current_row, i)
new_data_dict[key] = str(comboBox.getKeyByCurrentText())
elif key == 'to':
comboBox: ComboBoxInTableWidget = tableWidget.cellWidget(current_row, i)
new_data_dict[key] = str(comboBox.getKeyByCurrentText())
elif key == 'associatedFund':
comboBox: ComboBoxInTableWidget = tableWidget.cellWidget(current_row, i)
new_data_dict[key] = str(comboBox.getKeyByCurrentText())
else:
print("未知的记录属性!!: {}", format(key))
return None
return new_data_dict

【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件的更多相关文章

  1. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

    Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...

  2. ABAP 将单元格设置编辑状态 FORM

    FORM set_style  USING   fieldname                         style TYPE string                 CHANGING ...

  3. html5--移动端视频video的android兼容,去除播放控件、全屏等

    html5 中的video 在手机浏览器中的总结所有页面播放时, 如果选择全屏播放, 播放画面将浮动到屏幕的最上层 IOS 手机   自动播放 播放界面浮动文字 播放时是否自动全屏 能否嵌入在页面中播 ...

  4. QRowTable表格控件(三)-效率优化之-合理使用QStandardItem

    目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...

  5. easyui datagrid动态设置行、列、单元格不允许编辑

    Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...

  6. QRowTable表格控件(四)-效率优化之-优化数据源

    目录 一.开心一刻 二.问题分析 三.重写数据源 1.自己存储数据 2.重写data接口 四.比较 五.相关文章 原文链接:QRowTable表格控件(四)-效率优化之-优化数据源 一.开心一刻 一程 ...

  7. [C1] 优化 C1FlexGrid 单元格边框

    一  优化理由 如下图所示,如果按照 C1FlexGrid 自带的单元格边框设置,即对每个单元格的 CellStyle 的 BorderThickness 进行设置,会得到如下图的效果: 其中,明显可 ...

  8. 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

    Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文主要介绍在MVC界面里面,CKEditor的配置和使用.CKEditor的前身是FCKEdito ...

  9. Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值

    Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...

  10. MFC List Control 控件添加单元格编辑,实现可编辑重写

    在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...

随机推荐

  1. Ubuntu18.04 软件源更新:图形界面

    通过图形UI界面更新Ubuntu的软件源,手动修改虽然简单,但是要自己去找源,选一个系统配置好的更简单.但是新版的好像没有该功能,找到个奇葩的路径: 将Ubuntu16.04升级为Ubuntu18.0 ...

  2. 开源资产管理系统chemex

    目录 项目地址 部署 初始化环境 安装docker.Mariadb 配置数据库 docker 脚本 运行 项目地址 gitee项目链接 部署 参考链接:Centos7使用Docker部署Chemex资 ...

  3. redis的一些简单操作(针对key)

    redis默认16个数据,默认使用0号 select为切换数据库的关键字 select 1  切换数据库 设置值 set k1 lucy       key为 k1  value 为 lucy 查看全 ...

  4. gitlab-runner-config-in-docker

    gitlab in docker 网上有很多现成的解决方案,本文仅作流程梳理,若不需要,可直接用gitlab官方提供的镜像 installation Dockerfile FROM registry. ...

  5. PB从入坑到放弃(六)动态SQL应用

    写在前面 动态 SQL 语句是部分或者整个 SQL 语句在运行时才能确定,可以更好的与用户进行交互,大大提高了SQL的灵活性 一.执行SQL语句 1.1 执行无入参SQL ① 语法 EXECUTE I ...

  6. 记录一次解决数据库连接池连接泄露BUG

    1 BUG现象 系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机 2 BUG的业务流程 插入分数方法 涉及插入表ABCD 加了声明式事务 查询分数方法 涉及表ABC ...

  7. CVE-2022-42475-FortiGate-SSLVPN HeapOverflow 学习记录

    前言 之前就想复现这个洞,不过因为环境的问题迟迟没有开工.巧在前一阵子有个师傅来找我讨论劫持 ssl结构体中函数指针时如何确定堆溢出的偏移,同时还他把搭建好了的环境发给了我,因此才有了此文. 如何劫持 ...

  8. 实现在Qt窗口中嵌套SDL

    实现在Qt窗口中嵌套SDL 在现代软件开发中,多媒体处理和交互性成为应用程序不可或缺的一部分.Qt作为一个强大的GUI框架,为开发者提供了丰富的图形.界面和事件处理工具.然而,有时候,我们可能需要更多 ...

  9. K8s 多集群实践思考和探索

    作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群.多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实 ...

  10. nvm、node、vue安装、vue项目创建打包

    nvm.node.vue安装.创建vue项目 nvm作用:可以管理多个版本的node,切换node版本,下载node. 前情提要 参 考:https://zhuanlan.zhihu.com/p/51 ...