【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件
一、项目地址
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控件的更多相关文章
- 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件
Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...
- ABAP 将单元格设置编辑状态 FORM
FORM set_style USING fieldname style TYPE string CHANGING ...
- html5--移动端视频video的android兼容,去除播放控件、全屏等
html5 中的video 在手机浏览器中的总结所有页面播放时, 如果选择全屏播放, 播放画面将浮动到屏幕的最上层 IOS 手机 自动播放 播放界面浮动文字 播放时是否自动全屏 能否嵌入在页面中播 ...
- QRowTable表格控件(三)-效率优化之-合理使用QStandardItem
目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...
- easyui datagrid动态设置行、列、单元格不允许编辑
Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...
- QRowTable表格控件(四)-效率优化之-优化数据源
目录 一.开心一刻 二.问题分析 三.重写数据源 1.自己存储数据 2.重写data接口 四.比较 五.相关文章 原文链接:QRowTable表格控件(四)-效率优化之-优化数据源 一.开心一刻 一程 ...
- [C1] 优化 C1FlexGrid 单元格边框
一 优化理由 如下图所示,如果按照 C1FlexGrid 自带的单元格边框设置,即对每个单元格的 CellStyle 的 BorderThickness 进行设置,会得到如下图的效果: 其中,明显可 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder
Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文主要介绍在MVC界面里面,CKEditor的配置和使用.CKEditor的前身是FCKEdito ...
- Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值
Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...
- MFC List Control 控件添加单元格编辑,实现可编辑重写
在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...
随机推荐
- 树莓派命令——linux命令tips
sudo python3 test.py 和 python3 test.py 完全不是一个东西,有时候是链接的编译器不同,环境是完全不同,sudo会调用一些无关资源,反而容易造成程序运行失败或浪费cp ...
- 如何在 Ubuntu 20.04 上安装 KVM
如何在 Ubuntu 20.04 上安装 KVM 遇到两个问题: 没有创建 /etc/qemu/bridge.conf 文件 ERROR internal error: /usr/lib/qemu/q ...
- cesium 绑定dom弹窗(跟随模型)
https://blog.csdn.net/qq_36266612/article/details/109648367?utm_term=cesium%E6%80%8E%E4%B9%88%E6%B7% ...
- IE浏览器不支持TextDecoder()的问题
IE浏览器不支持TextDecoder()方法,因此在进行Arrbuffer转string或中文时,出现未定义的错误.通过网上查找方法,可以通过引用第三方库进行解决. github地址:https:/ ...
- Git-更换服务器问题
一.Permission denied (publickey) git指令出现Permission denied (publickey),是ssh key过期的问题,需要对ssh key进行更新,所有 ...
- 定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的字典和元组
知识点:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. li=[3,4,5] t=(7,8,9) print(list(zip(li,t ...
- Midjourney 创建私人画图机器人(保姆级教程)
本教程收集于:AIGC从入门到精通教程汇总 之前给大家介绍过了Midjourney 的注册教程:AI绘画:Midjourney 注册(保姆级教程) 也有Stable Diffusion(开源)的本地搭 ...
- linux cat查看文件使用grep实现多条件多场景过滤
转载请注明出处: 在实际应用过程中,我们查看日志文件时,经常会根据一定自定义的词语过滤,查看所有相关的数据行.最近遇到用cat查看文件,需要根据多关键词进行不同的场景过滤,在这里进行一个简单的总结: ...
- 修改DataTable中的值
DataTable dt ;for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; row.BeginEdit() ...
- linux shell根据关键字用sed注释掉整行
一.将带有ab的行注释掉 # cat test # sed -i '/ab/s/^\(.*\)$/#\1/g' test ab是关键字 s是语法替换 ^是行首 $是行尾 \是转义符 数字1带表前述匹配 ...