|
一、项目地址
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
复制代码 来源:https://www.cnblogs.com/LinfengBingyi/p/17747789.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|