最强大脑记忆曲线(6)——字词录入页设计
目录
- 总目标
- 目标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)——字词录入页设计相关推荐
- 最强大脑记忆曲线(13)--应用程序的加密及授权码的实现
加密和授权 一.python程序加密与授权的思考 二.python文件 加密 三.注册机代码 目前我的小项目"最强大脑记忆曲线"已经可以出1.0版了,发布之前的最后一个环节就是给应 ...
- 最强大脑记忆曲线(12)-- 录入数据修改
录入数据修改 一.设计思路 二.解决过程 2.1 设计修改窗口 2.2 转成py文件 2.3 写业务逻辑 1.先显示一下基础页面 2.配合适配器,自动调整窗口大小 3.在数据录入窗口或背记窗口双击某条 ...
- html5 最强大脑最强记忆游戏
html5 最强大脑最强记忆游戏,这是款煅练多维记忆和测试记忆力的游戏,源自江苏卫视最强大脑最强记忆. 一.白块模式: 迅速记住白块变灰的顺序,并按变灰顺序,重复点击一遍:若点击顺序出错,则" ...
- 当百度大脑小度完胜人类《最强大脑》
2017年1月20号,百度大脑"小度"在国际知名节目"最强大脑"以3:1完胜<最强大脑>中国3名选手,在人脸.声音和模糊识别取得胜利,成功晋取得全球 ...
- 计算机修改人类记忆曲线,遗忘曲线
遗忘曲线由德国心理学家艾宾浩斯(H.Ebbinghaus)研究发现,描述了人类大脑对新事物遗忘的规律.人体大脑对新事物遗忘的循序渐进的直观描述,人们可以从遗忘曲线中掌握遗忘规律并加以利用,从而提升自我 ...
- 计算机修改人类记忆曲线,遗忘曲线——揭秘人类记忆存储的奥秘
文/元小元 人类遗忘曲线 生活中,我们经常会注意到有些人记忆事物的能力和记忆的时间远超常人,他们的学习能力也非常赞,只要是学习过的东西基本上都能记忆很长的时间,可是自己明明很努力的看甚至背诵,默念,尝 ...
- 最强大脑----“汉字女英雄”填字游戏研究
最强大脑----"汉字女英雄"填字游戏研究 一.引子 江苏卫视的<最强大脑>2014年1月17日星期五第三期第一个节目,是"汉字女英雄"胡小玲所表演 ...
- Python游戏开发:最强大脑第一关,数字华容道
前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...
- 商汤组了「最强大脑」局,正儿八经解释为啥搞起电竞AI
金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 前不久,<星际争霸2>虫王iA周航加入商汤科技,担任AI研究员. 堪称电竞职业玩家「转型最成功」的案例之一. 而商汤作为一家以计 ...
- 百度大脑险胜最强大脑背后:200万人2亿照片做训练
百度大脑险胜最强大脑背后:200万人2亿照片做训练 2017-01-08 12:56 来源:第一财经 分享 摘要:在AlphaGo的升级版化身"神秘棋手"Master以60胜 ...
最新文章
- 彩色图如何转换成灰度
- 磨刀不误砍柴工——数据准备的过程与实践
- boost::hana::plus用法的测试程序
- DelegateModelGroup QML类型
- 【知识蒸馏】ICCV21_Channel-wise Knowledge Distillation for Dense Prediction
- oracle不能访问管理页面,Oracle Grid Control CONSOLE无法打开9i数据库的管理维护页面...
- linux中文件的合并、归档、和压缩
- 安装程序将在重启您的计算机后黑屏,安装windows10一直黑屏怎么解决_win10安装到一半黑屏修复方法...
- android.os.log,android.os.Handler和java.util.logging.Handler之间的区别?
- Unable to add window -- token android.os.BinderProxy---Android原生开发工作笔记142
- spark 集群搭建 详细步骤
- IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.
- 计算机ps图片在哪里看,怎么看图片有没有PS 两种查看照片有没被PS过的方法-电脑教程...
- Unity中TextMeshPro显示中文
- 设置Chrome忽略网站证书错误
- 什么是二维数组以及二维数组传参
- nyoj 3 多边形重心问题
- 2022-2028全球与中国夹层升降机市场现状及未来发展趋势
- 读书笔记-TCP简介
- 上号神器,穿越火线扫码登录教程