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

这篇具有很好参考价值的文章主要介绍了【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目地址

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

二、新增

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

1.1 功能详述

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

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

温饱:基本维持生存且不铺张浪费的消费行为
小康:在温饱的基础上,可以使生活变得比较舒适的消费行为
奢华:可有可无的,或超出自身消费水平的消费行为

【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件
该属性意在于让用户更好地明白基本消费与超额消费占比,以便遏制不必要的消费行为

2. 类别(支出表、收入表)
【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件
计划在将来支持用户自定义支出或收入类别。目前写死在代码中,可以在CommonFiles/ConstArgs.py文件中修改后使用

3. 支出账户、收入账户、关联账户
【日常收支账本】【Day04】优化编辑动账记录的操作——QTableWidget单元格设置QComboBox控件
计划在将来支持用户自定义账户列表。目前写死在代码中,可以在CommonFiles/ConstArgs.py文件中修改后使用

1.2 代码实现

思路分析

支出、收入、转移表格中的列名有大量重复,因此将所有列的初始化集中到一个函数中,根据列名执行对应初始化方式。同时,还要区分已存在记录的行和空白行。综上,实现了三个函数:文章来源地址https://www.toymoban.com/news/detail-711673.html

函数名 作用
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控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “高效记录收支明细,按时间轻松查找借款信息“

    我们有时候要去查找借款信息,只记得住借款记录的日期,想通过日期来进行筛选出借款信息,要如何进行操作?今天就让小编来教教大家要如何操作。 第一步,我们要 打开 【晨曦记账本】, 并 登录账本 。 第二 步,进入到主页面之后,我们要点击上方功能栏里的“借还

    2024年02月09日
    浏览(53)
  • 操作系统 day04(系统调用)

    什么是系统调用 库函数和系统调用的区别 应用程序可以通过汇编语言直接进行系统调用,也可以使用高级语言的库函数来进行系统调用。而有的库函数涉及系统调用,如“创建一个新文件”函数,有的不涉及,如“取绝对值”函数 什么功能要用到系统调用 系统调用的过程

    2024年02月06日
    浏览(42)
  • Day56 | 583. 两个字符串的删除操作 | 72. 编辑距离

    583. 两个字符串的删除操作 注意点: 1.当word1[i - 1] 与 word2[j - 1]不相同的时候, 情况一:删word1[i - 1],最少操作次数为dp[i - 1][j] + 1 情况二:删word2[j - 1],最少操作次数为dp[i][j - 1] + 1 情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2 因为 dp[i][j-1]+1 = d

    2024年02月08日
    浏览(45)
  • 超级账本Fabric的世界状态操作与账本操作

    在 Hyperledger Fabric 中,账本由两个不同但相关的部分组成 - 世界状态和区块链。 世界状态: 一个数据库,其中存储了一组帐本状态的当前值的缓存。世界状态使程序可以轻松地直接访问状态的当前值,而不必通过遍历整个交易日志来计算状态值。世界状态可以频繁更改,因为

    2024年02月10日
    浏览(42)
  • Web APls-day04-对象与结点操作

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 日期对象 实例化  日期对象方法  时间戳  节点操作  DOM节点 查找节点  父节点查找: 子节点查找: 兄弟关系查找: 增加节点  1.创建节点 2.追加节点  3.克隆节点 

    2024年02月06日
    浏览(39)
  • PADS VX2.7学习记录04-PADS Layout软件操作

    命令:工具——选项(快捷键Ctrl+Enter) 常规设置: 剩下的默认即可。 操作命令: 设置——显示颜色 1、背景,板框,选择,连接,亮显固定设置 2、显示网络名称,都打钩 3、可以根据自己喜欢的 颜色配置 4、把自己喜欢的颜色配置保存起来,方便下次使用 命令:查看——

    2024年02月08日
    浏览(48)
  • 读高性能MySQL(第4版)笔记04_操作系统和硬件优化

    4.9.2.1. 允许在内存中更改页面,而不用将更改刷新到磁盘,这通常涉及随机I/O,速度非常慢 4.9.2.2. 将更改的记录写入顺序日志文件,这样要快得多 4.9.2.3. 后台线程可以稍后将修改过的页面刷新到磁盘,这样做可以优化写操作的性能 5.11.2.1. 只有进行特殊的擦除操作之后,

    2024年02月09日
    浏览(39)
  • 记录:云计算日常学习分享

    1.修改主机名 2.防火墙和selinux 3.校对时间 4.配置静态ip 5.重启网卡 6.测试网络 1.阿里云 2.本地源 下载yum配置文件    安装本地源   操作同上 1.部署nginx 2.启动nginx 3.测试是否启动成功 4.部署MySQL数据库 5.启动MySQL数据库 6.获取临时密码并修改 7.部署php 8.启动 1.将nginx和php关联起

    2024年02月22日
    浏览(34)
  • 日常开发报错记录

    20230424 python3.7中报错:No module named ‘typing_extensions‘  在网上找到的解决办法:【pytorch】错误:No module named ‘typing_extensions‘ 问题解决_no module named typing_污喵王z的博客-CSDN博客 就是将缺失的文件typing_extensions.py,补充到路径:…envspy3.7Libtyping.py的同目录下,但发现github上

    2023年04月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包