PyQt项目实战-工作小助手(4 利用QSqlTableModel和tableView 实现Todolist)

本博客介绍了如何使用PyQt的QSqlTableModel和tableView控件来创建一个Todolist应用,包括查询、新增、删除和导出功能。通过界面设计、设置查询过滤条件、自定义数据代理、新增和删除操作,以及导出功能的实现,详细讲解了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQt项目实战-工作小助手(4 利用QSqlTableModel和tableView 实现Todolist)

本部分通过QSqlTableModel和tableView控件实现todolist工作待办的查询、新增、修改、删除和导出功能

1、界面设计

界面支持筛选查询、新增、删除和导出功能。先上图。
工作计划界面

  1. 第一行为筛选查询字段,实现查询功能:

日期范围为comboBox,预设为全部、本日、本周、上周、本月、上月、本年、本年之前。

程度为comboBox,根据重要和紧急程度分为:

  • 重要紧急,该部分任务优先处理
  • 不重要紧急,次之
  • 重要不紧急,再次之
  • 不重要不紧急 ,最后处理

事项为lineEdit,支持通过输入文本模糊匹配查询。

  1. 第二行为tableview控件,展示查询结果和支持直接修改数据库。
  2. 第三行为toolButton,分别实现新增记录、删除记录和导出任务功能。

2、实现todolist查询

  1. 新建QSqlTableModel实例todomodel。QSqlTableModel类提供了一个可读写单张SQL表的可编辑数据模型。支持修改,插入,删除,查询,和排序。EditStrategy使用OnFiledChange策略实现编辑功能。
self.todomodel = QSqlTableModel()
self.todomodel.setTable("todolist")       self.todomodel.setEditStrategy(QSqlTableModel.OnFieldChange)

setEditStrategy各取值含义如下:
QSqlTableModel.OnFieldChange,一改动马上提交数据库
QSqlTableModel.OnRowChange,当前行号变化再提交数据库
QSqlTableModel.OnManualSubmit,默认值,手动提交submitAll()修改才生效。

  1. 默认情况下,QSqlTableModel查询返回所有记录。可通过setFilter()实现sql中where语句的功能,即设置查询过滤条件。查询条件要转化为Sqlite3数据库所能识别的过滤语句,特别是要处理各类日期字典。

本日:date(pdate) = date(‘now’)
本周:date(pdate) >= date(‘now’,‘weekday 1’,’-7 day’))
上周:(date(pdate) >= date(‘now’,‘weekday 1’,’-14 day’) and date(pdate) < date(‘now’,‘weekday 1’,’-7 day’))
本月:(date(pdate) >= date(‘now’,‘start of month’))
上月:(date(pdate) >= date(‘now’,‘start of month’,’-1 month’) and date(pdate) < date(‘now’,‘start of month’))
本年:(date(pdate) >= date(‘now’,‘start of year’))
本年以前:(date(pdate) < date(‘now’,‘start of year’))

        # 2、业务条件转换为查询过滤语句。
        ##2.1文本模糊匹配
        sql1 = "(content like '%{}%')".format(scontent)
        filterlist = sql1
        ##2.2待办事项建立日期范围。
        if sdaterange in [1, 2, 3, 4, 5, 6, 7]:
            if sdaterange == 1:  # 本日
                sql2 = "(date(pdate) = date('now'))"
            elif sdaterange == 2:  # 本周
                sql2 = "(date(pdate) >= date('now','weekday 1','-7 day'))"
            elif sdaterange == 3:  # 上周
                sql2 = "(date(pdate) >= date('now','weekday 1','-14 day') and date(pdate) < date('now','weekday 1','-7 day'))"
            elif sdaterange == 4:  # 本月
                sql2 = "(date(pdate) >= date('now','start of month'))"
            elif sdaterange == 5:  # 上月
                sql2 = "(date(pdate) >= date('now','start of month','-1 month') and date(pdate) < date('now','start of month'))"
            elif sdaterange == 6:  # 本年
                sql2 = "(date(pdate) >= date('now','start of year'))"
            elif sdaterange == 7:  # 去年及以前
                sql2 = "(date(pdate) < date('now','start of year'))"
            filterlist = filterlist + " and " + sql2
        else:
            sql2 = ''
        ##2.3待办事项状态。
        if sfinstatus in [1, 2]:
            sql3 = "(finstatus={})".format(sfinstatus)
            filterlist = filterlist + " and " + sql3
        else:
            sql3 = ''
        ##2.4待办事项分类条件。
        if scatalog in [1, 2, 3, 4]:
            sql4 = "(catalog={})".format(scatalog)
            filterlist = filterlist + " and " + sql4
        else:
            sql4 = 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值