【Pyqt5】实现小学三年级口算题生成器
2018-02-05 22:13
821 查看
寒假在家无聊,弟弟学校布置数学作业 : 每天五分钟数学题口算,并记录时间。如果在本子上出题,然后让弟弟做,30多天,估计要写一本子,感觉好累。一直想学pyqt,这次终于找到了动力,于是Pyqt边学边写,实现了基本的口算题和时间功能,现分享如下:一:首先在QTdesigner下画类似界面如下,包括10个Vertical Layout,以及3个Button,一堆label:二:其次,UI文件转成py文件(工具:PyUIC)三:然后呢,我们在py文件里进行程序的编写:1:时间模块:包括日期的显示和5min的倒计时,主要程序如下:
self.time1 = time.time() self.time2 = time.time() self.timer_result = QtCore.QTimer() def time_result1(self): self.time2 = time.time() t = 301 - int(self.time2 - self.time1) if t==1: reply = QMessageBox.question(self, 'Message', "Time is out!", QMessageBox.Yes) if reply == QMessageBox.Yes: self.panduan() quit() t_m = '0' + str(int(t / 60)) t_s = str(int(t % 60)) self.label_5.setText(t_m + ':' + t_s) 我们设置了两个时间实例,进行比对后得到时间差,依次进行时间的倒计时。时间到了后弹出消息框提示,然后quit退出界面。为显示日期,我们加上这句话:self.label_2.setText(time.strftime("%Y-%m-%d ", time.localtime()))2:开始:Go按钮我们Go按钮的事件是开启定时器(500ms),调用timu(),我们随机1-4代表+=*/四则运算,我们对每一个进行随机生成,然后对两个操作数进行随机生成,鉴于三年级,加减包括3位数,而乘除只有三位数和一位数,大家可以根据自己情况修改:
def jishi(self):self.timer_result.start(500)#0.5s定时器self.time1 = time.time()self.timu()self.pushButton.setEnabled(False)def timu(self):for i in range(10):self.fuhao[i]=random.randint(1,4)for i in range(10):if self.fuhao[i] == 1:# +s1=random.randint(1,999)s2=random.randint(1,999)self.xuhao1_num[i] = s1self.xuhao3_num[i] = s2self.settext_label(self.xuhao1[i],str(s1))self.settext_label(self.xuhao3[i], str(s2))self.settext_label(self.xuhao2[i],'+')if self.fuhao[i]==2:# -s1=random.randint(1,999)s2 =random.randint(1, s1)self.xuhao1_num[i]=s1self.xuhao3_num[i]=s2self.settext_label(self.xuhao1[i], str(s1))self.settext_label(self.xuhao3[i], str(s2))self.settext_label(self.xuhao2[i], '-')if self.fuhao[i]==3:# *s1 = random.randint(1, 999)s2 = random.randint(2, 9)self.xuhao1_num[i]=s1self.xuhao3_num[i]=s2self.settext_label(self.xuhao1[i], str(s1))self.settext_label(self.xuhao3[i], str(s2))self.settext_label(self.xuhao2[i], '×')if self.fuhao[i] == 4:# /s2 = random.randint(2, 9)s1=random.randint(1,111)s1=s2*s1self.xuhao1_num[i] = s1self.xuhao3_num[i] = s2self.settext_label(self.xuhao1[i], str(s1))self.settext_label(self.xuhao3[i], str(s2))self.settext_label(self.xuhao2[i], '÷')3:提交按钮和退出按钮编写:提交:我们写完后将结果提交,后台处理填写结果(获取每个的label和lineEdit的数值,然后进行计算,判断答题人的正确与否,正确与否存入result_label),关键程序如下:
self.pushButton_3.clicked.connect(self.close_file)#Exit按钮self.pushButton_4.clicked.connect(self.panduan)#Submit按钮def close_file(self):quit()#退出键只退出界面即可def panduan(self):for i in range(10):s=self.gettext_line(self.xuhao4[i])self.result[i]=int(s)for i in range(10):if self.fuhao[i] == 1:# +if self.xuhao1_num[i] +self.xuhao3_num[i]!=self.result[i]:self.result_label[i]=1if self.fuhao[i]==2:# -if self.xuhao1_num[i] -self.xuhao3_num[i]!=self.result[i]:self.result_label[i]=1if self.fuhao[i]==3:# *if self.xuhao1_num[i] *self.xuhao3_num[i]!=self.result[i]:self.result_label[i]=1if self.fuhao[i] == 4:# /if self.xuhao1_num[i] /self.xuhao3_num[i]!=self.result[i]:self.result_label[i]=1
self.timu()4:写入word文档:我们将题目和结果以及正确与否写入word文档:首先安装python-docx库:pip install pyqt-docx
from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import QMessageBoximport timeimport randomimport docx
self.file = docx.Document()#创建实例self.file.add_paragraph('XXX寒假口算题目')self.file.add_paragraph(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) #写入标题#写入计算式子
for i in range(10):if self.fuhao[i] == 1:# +if self.result_label[i]==1:self.file.add_paragraph(str(self.xuhao1_num[i])+'+'+str(self.xuhao3_num[i])+'='+str(self.result[i])+'错')else:self.file.add_paragraph(str(self.xuhao1_num[i]) + '+'+str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '对')if self.fuhao[i] == 2:# -if self.result_label[i] == 1:self.file.add_paragraph(str(self.xuhao1_num[i]) + '-' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '错')else:self.file.add_paragraph(str(self.xuhao1_num[i]) + '-' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '对')if self.fuhao[i] == 3:# *if self.result_label[i] == 1:self.file.add_paragraph(str(self.xuhao1_num[i]) + '×' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '错')else:self.file.add_paragraph(str(self.xuhao1_num[i]) + '×' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '对')if self.fuhao[i] == 4:# /if self.result_label[i] == 1:self.file.add_paragraph(str(self.xuhao1_num[i]) + '÷' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '错')else:self.file.add_paragraph(str(self.xuhao1_num[i]) + '÷' + str(self.xuhao3_num[i]) + '=' + str(self.result[i]) + '对')大功告成,完整程序后续会分享。还有很多不完善的,望指出,共同交流学习~
相关文章推荐
- PyQt4--QThread实现界面与算法分离
- “IQ波形文件生成器”C++实现和Python实现的对比
- ID生成器的一种可扩展实现方案
- python-7-如何使用生成器函数实现可迭代对象?
- Python 用一个生成器函数实现杨辉三角
- pyQT实现自动找茬游戏
- Pyqt4 360界面风格皮肤实现
- python3+PyQt5+Qt Designer实现堆叠窗口部件
- 【PyQt4 实例22】实现ftp的上传和下载
- JavaScript实现随机数生成器(去重)
- PyQt实现一个简单的License系统(一)
- PyQt实现测试工具
- 用 eric6 与 PyQt5 实现python的极速GUI编程(35篇PyQT和200多篇Python)
- [PyQt] 在QLabel上用drawText实现文字滚动
- Python基于生成器迭代实现的八皇后问题示例
- OpenJWeb平台实现了弹出选择窗口生成器
- pyqt4实现tab界面切换
- python pyqt4 PyQT实现了使用QThread后台处理数据
- 生成器实现斐波那契(Python)
- PyQt4--QThread实现界面与算法的分离--2