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

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

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
  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在这个项目案例中,我们将学习如何使用OpenCV和PyQt实现一个鼠标框选功能。鼠标框选功能允许用户通过拖动鼠标来创建一个矩形框,然后可以在这个框内进行处理。 首先,我们需要创建一个PyQt窗口,并在窗口中显示图像。我们使用OpenCV的`cv2.imshow()`函数来显示图像,并通过PyQt的`QLabel`来将图像显示在窗口中。 接下来,我们需要实现鼠标事件的处理函数。我们可以使用PyQt的信号槽机制来捕获鼠标事件。当用户按下鼠标左键时,我们将记录下鼠标的坐标作为框选的起始点。当用户释放鼠标左键时,我们将记录下鼠标的坐标作为框选的结束点,并根据这两个点创建一个矩形框。 在绘制矩形框时,我们可以使用OpenCV的`cv2.rectangle()`函数来绘制矩形,然后将绘制好的图像显示在窗口中。 最后,我们可以在矩形框内部进行一些处理操作,比如截取矩形框内的图像区域,并对该区域进行一些处理,如图像增强、目标检测等等。 这个鼠标框选的功能在很多场景中非常有用,比如在图像处理、目标检测、图像分割等领域中,我们可以利用这个功能选择目标区域并进行针对性的处理,从而提高处理效率和准确性。 综上所述,通过这个项目案例,我们学习了如何使用OpenCV和PyQt实现鼠标框选功能,并了解了它在图像处理领域中的应用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值