目录

  • 总目标
  • 目标1:加载科目名称
  • 目标2:提交内容是字符时(完成信息提交和展示)
    • 2.1 字符串提交入库
    • 2.2 将已提交信息展现在前台视图控件中

今天是实施想法的第二天,争取今天实现字词录入和复习的基本功能。当然接下来一定会遇到很多想不到的问题,我都会一一记录。

总目标

这个子页面的内容,我原本准备使用一个新的python模块,不在main.py下实现,目的是结构清晰,代码可读可维护。

但我在使用中发现,我的所有控件对象都在同一个ui下(如下图),将多个处理过程放到不同的py模块中,需要把ui做为全局变量,而全局的ui,不会判断该Ui下有哪些控件的,所以不会出现任何错误提示,反而给写脚本增加了极大的困难。

所以,用哪种方式让代码可读可维护,需要视情况而定。(实践才是硬道理呀!)

·

目标1:加载科目名称

用以下语句实现即可:

            self.ui.cB_book_2.setModel(self.tableModelSub)self.ui.cB_book_2.setModelColumn(self.tableModelSub.fieldIndex('sub_name'))

目标2:提交内容是字符时(完成信息提交和展示)

需要注意1:当条件满足时才可以提交,条件包括:
(1)如果不是图片,则“字词” 的录入框不能为空,记得去字符串两端的空格
(2)如果是图片,则图片的路径不能空
即用这样的脚本实现:

    wordIn = self.ui.lineEdit_3.text().strip()picIn = self.ui.label_22.text()if self.ui.cB_grade_2.currentText() == '否' and wordIn != '':print('不空且是字符')# 下面是入库语句# ....elif self.ui.cB_grade_2.currentText() == '否' and picIn != '':print('不空且是图片')# 下面是入库语句# ....

需要注意2:入库时需要明确是哪个学生哪个科目,而这两个信息在前台是以对应的name出现的,入库时却需要Id,因此需要通过一种方法,把所选学生或科目的ID找出来。

下面脚本,先找出下拉框当前选项的序号,再利用这个序号去tableModel中找出同一行的ID号:

        sub_row = self.ui.cB_book_2.currentIndex()sub_id = self.tableModelSub.data(self.tableModelSub.index(sub_row, 0))stu_row = self.ui.cB_Stu.currentIndex()stu_id = self.tableModelStu.data(self.tableModelStu.index(stu_row, 0))

2.1 字符串提交入库

方法一:
先查出数据库中当前tableMode的最后一行,然后以此行号为 word_id,并把相应参数填入。最后用setRecord()实现插入记录,记得submit。

        lastRow = self.tableModelWord.rowCount()print('最后一行是{}'.format(lastRow))self.tableModelWord.insertRow(lastRow, QModelIndex())curRec = self.tableModelWord.record()  # 只有表头curRec.setValue('word_id', 'w_' + str(lastRow))curRec.setValue('pic_or_not', 'no')curRec.setValue('word', wordIn)curRec.setValue('means', means)curRec.setValue('sub_id', sub_id)curRec.setValue('stu_id', stu_id)self.tableModelWord.setRecord(lastRow, curRec)  # 插入记录if self.tableModelWord.submitAll():print('插入记录成功')

但该方法存在两个问题:
(1) tableModel 如果被设置了查询条件,对应的rowcount就不是全表的记录数;
(2) word表中如果出行删除行的操作,会使整个表的行数减少,也会导致rowcount重复。
以上两情形都会使word_id出现重复。

因此word_id 不应该依赖于rowcount。

方法二:
查询words表中的行数,如果为0,则word_id 从0开始;如果不为0,则使用max(word_id)+1。

调整以后又提交不成功了。

        qr = QtSql.QSqlQuery(self.db)qr.exec("select max(rowid) as myrowid from words")qr.last()if qr.value('myrowid') == '':  # 新数据库会是这样的情况 没有一条记录lastRow = 1else:qr.exec("select max(word_id) as max_id  from words")qr.last()lastRow = qr.value('max_id') + 1print('query查到的最后一条记录:{}'.format(lastRow))qr.finish()

原因:
因为接下来的插入语句:

self.tableModelWord.insertRow(lastRow, QModelIndex())

中的lastRow是从0开始的,而上面的的lastRow是从1开始的。调整成一致,即可完成。

进一步优化功能

显然设计时没有考虑重复录入的问题,同一个单词应该避免重复录入。

        qr_congfu = QtSql.QSqlQuery(self.db)qr_congfu.exec("select word  from words where word= '" + wordIn + "'")qr_congfu.last()if qr_congfu.value('word') == None:  # 新数据库会是这样的情况 没有一条记录dup = Falseelse:dup = TrueQMessageBox.warning(self, '提示:', '已经存在字词:'+str(wordIn))qr_congfu.finish()

·

2.2 将已提交信息展现在前台视图控件中

在这里有一个问题需要先考虑清楚:视图控件中展示words表中所有的数据吗?还是只展示近几天的数据,还是只展示当天录入的数据?

这要看展示意义:
(1)确认提交成功了
(2)能看得出本次背单词的个数

对于历史数据,最好别展示。原因:
(1)随着时间推移,历史数据会越来越多,不便全展示;
(2)如果想了解一段时间内背诵的单词,可以单独增加个功能点。
想清楚这个问题,就好做功能设计了。

字词录入页的视图只展示当天该学生录入的字词,可以按科目分组展示。

写到这儿,我发现在表设计阶段少了一个时间字段

最强大脑记忆曲线(6)——字词录入页设计相关推荐

  1. 最强大脑记忆曲线(13)--应用程序的加密及授权码的实现

    加密和授权 一.python程序加密与授权的思考 二.python文件 加密 三.注册机代码 目前我的小项目"最强大脑记忆曲线"已经可以出1.0版了,发布之前的最后一个环节就是给应 ...

  2. 最强大脑记忆曲线(12)-- 录入数据修改

    录入数据修改 一.设计思路 二.解决过程 2.1 设计修改窗口 2.2 转成py文件 2.3 写业务逻辑 1.先显示一下基础页面 2.配合适配器,自动调整窗口大小 3.在数据录入窗口或背记窗口双击某条 ...

  3. html5 最强大脑最强记忆游戏

    html5 最强大脑最强记忆游戏,这是款煅练多维记忆和测试记忆力的游戏,源自江苏卫视最强大脑最强记忆. 一.白块模式: 迅速记住白块变灰的顺序,并按变灰顺序,重复点击一遍:若点击顺序出错,则" ...

  4. 当百度大脑小度完胜人类《最强大脑》

    2017年1月20号,百度大脑"小度"在国际知名节目"最强大脑"以3:1完胜<最强大脑>中国3名选手,在人脸.声音和模糊识别取得胜利,成功晋取得全球 ...

  5. 计算机修改人类记忆曲线,遗忘曲线

    遗忘曲线由德国心理学家艾宾浩斯(H.Ebbinghaus)研究发现,描述了人类大脑对新事物遗忘的规律.人体大脑对新事物遗忘的循序渐进的直观描述,人们可以从遗忘曲线中掌握遗忘规律并加以利用,从而提升自我 ...

  6. 计算机修改人类记忆曲线,遗忘曲线——揭秘人类记忆存储的奥秘

    文/元小元 人类遗忘曲线 生活中,我们经常会注意到有些人记忆事物的能力和记忆的时间远超常人,他们的学习能力也非常赞,只要是学习过的东西基本上都能记忆很长的时间,可是自己明明很努力的看甚至背诵,默念,尝 ...

  7. 最强大脑----“汉字女英雄”填字游戏研究

    最强大脑----"汉字女英雄"填字游戏研究 一.引子 江苏卫视的<最强大脑>2014年1月17日星期五第三期第一个节目,是"汉字女英雄"胡小玲所表演 ...

  8. Python游戏开发:最强大脑第一关,数字华容道

    前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...

  9. 商汤组了「最强大脑」局,正儿八经解释为啥搞起电竞AI

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 前不久,<星际争霸2>虫王iA周航加入商汤科技,担任AI研究员. 堪称电竞职业玩家「转型最成功」的案例之一. 而商汤作为一家以计 ...

  10. 百度大脑险胜最强大脑背后:200万人2亿照片做训练

     百度大脑险胜最强大脑背后:200万人2亿照片做训练 2017-01-08 12:56 来源:第一财经 分享 摘要:在AlphaGo的升级版化身"神秘棋手"Master以60胜 ...

最新文章

  1. 彩色图如何转换成灰度
  2. 磨刀不误砍柴工——数据准备的过程与实践
  3. boost::hana::plus用法的测试程序
  4. DelegateModelGroup QML类型
  5. 【知识蒸馏】ICCV21_Channel-wise Knowledge Distillation for Dense Prediction
  6. oracle不能访问管理页面,Oracle Grid Control CONSOLE无法打开9i数据库的管理维护页面...
  7. linux中文件的合并、归档、和压缩
  8. 安装程序将在重启您的计算机后黑屏,安装windows10一直黑屏怎么解决_win10安装到一半黑屏修复方法...
  9. android.os.log,android.os.Handler和java.util.logging.Handler之间的区别?
  10. Unable to add window -- token android.os.BinderProxy---Android原生开发工作笔记142
  11. spark 集群搭建 详细步骤
  12. IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.
  13. 计算机ps图片在哪里看,怎么看图片有没有PS 两种查看照片有没被PS过的方法-电脑教程...
  14. Unity中TextMeshPro显示中文
  15. 设置Chrome忽略网站证书错误
  16. 什么是二维数组以及二维数组传参
  17. nyoj 3 多边形重心问题
  18. 2022-2028全球与中国夹层升降机市场现状及未来发展趋势
  19. 读书笔记-TCP简介
  20. 上号神器,穿越火线扫码登录教程

热门文章

  1. python计算空间向量夹角——原理及代码详解
  2. 宣传一个非常好看的鼠标指针样式
  3. OpenNLP进行中文命名实体识别(下:载入模型识别实体)
  4. 数字光栅投影技术——相移轮廓术(PSP)
  5. Python:实现miller rabin米勒-拉宾素性检验算法(附完整源码)
  6. 爬虫,爬取句子迷《龙族》
  7. 网易裁员,让保安把身患绝症的我赶出公司。我在网易亲身经历的噩梦!
  8. 从事IC设计工作强度大不大?是吃青春饭吗?
  9. 看英语书记录的单词-5
  10. kodwebserver mysql_kod云项目搭建