刚开始学PYQT5,写了个小学算术小工具。自动生成题目(一二位数加减乘除),倒计时测试。
提交之后判断结果并且保存试卷截图。
效果如下:
主界面代码如下:
```python
class Ui_Main(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.setFixedSize(441, 162)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
Form.setSizePolicy(sizePolicy)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(20, 20, 401, 131))
self.widget.setObjectName("widget")
self.gridLayout = QtWidgets.QGridLayout(self.widget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
#循环定义12个按钮,分别对应一位数加法、一位数减法、一位数乘法、一位数除法、一二位数加法、一二位数减法、一二位数乘法、一二位数除法、两位数加法、两位数减法、两位数乘法、两位数除法
#3行4列grid
for i in range(1,13):
exec('self.pushButton_'+str(i) + '=' +'QtWidgets.QPushButton(self.widget)')
eval('self.pushButton_'+str(i)).setObjectName("pushButton_"+str(i))
self.gridLayout.addWidget(eval('self.pushButton_'+str(i)), int((i-1)/4), (i+3)%4, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
self.pushButton_1.clicked.connect(lambda: self.re('1+'))
self.pushButton_2.clicked.connect(lambda: self.re('1-'))
self.pushButton_3.clicked.connect(lambda: self.re('1*'))
self.pushButton_4.clicked.connect(lambda: self.re('1/'))
self.pushButton_5.clicked.connect(lambda: self.re('3+'))
self.pushButton_6.clicked.connect(lambda: self.re('3-'))
self.pushButton_7.clicked.connect(lambda: self.re('3*'))
self.pushButton_8.clicked.connect(lambda: self.re('3/'))
self.pushButton_9.clicked.connect(lambda: self.re('2+'))
self.pushButton_10.clicked.connect(lambda: self.re('2-'))
self.pushButton_11.clicked.connect(lambda: self.re('2*'))
self.pushButton_12.clicked.connect(lambda: self.re('2/'))
#for i in range(1,9):
# eval('self.pushButton_'+str(i)).clicked.connect(lambda: self.re(str(int(i/5)+1)+('+' if i%4==1 else '-' if i%4==2 else '*' if i%4==3 else '/')))
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "小学算术 选择题目类型"))
for i in range(1,13):
eval('self.pushButton_'+str(i)).setText(_translate("Form", ("一" if int((i-1)/4)==0 else "一、二" if int((i-1)/4)==1 else "二")+"位数"+ ('加' if i%4==1 else '减' if i%4==2 else '乘' if i%4==3 else '除') +"法"))
子界面UI代码如下:
class Ui_Main2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(570, 629)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
self.centralwidget = QtWidgets.QWidget(MainWindow)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.centralwidget.setObjectName(“centralwidget”)
#倒计时UI
self.label_date = QtWidgets.QLabel(self.centralwidget)
self.label_date.setText('日期:')
self.label_jishi = QtWidgets.QLabel(self.centralwidget)
self.label_date.setGeometry(QtCore.QRect(210,5,60,45))
self.label_jishi.setGeometry(QtCore.QRect(100,52,200,45))
self.label_date_1 = QtWidgets.QLabel(self.centralwidget)
self.label_jishi_1 = QtWidgets.QLabel(self.centralwidget)
self.label_date_1.setGeometry(QtCore.QRect(300,5,250,45))
self.label_jishi_1.setGeometry(QtCore.QRect(300,52,250,45))
self.label_date_1.setText(time.strftime("%Y-%m-%d ", time.localtime()))
self.start = QtWidgets.QPushButton(self.centralwidget)
self.start.setText('开始')
self.start.setGeometry(230,100,70,50)
self.start.clicked.connect(self.counterClock)
self.label_date.setSizePolicy(sizePolicy)
self.label_date_1.setSizePolicy(sizePolicy)
self.start.setSizePolicy(sizePolicy)
self.label_jishi.setSizePolicy(sizePolicy)
self.label_jishi_1.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(16)
self.label_date.setFont(font)
self.label_date_1.setFont(font)
self.label_jishi_1.setFont(font)
self.label_jishi.setFont(font)
self.start.setFont(font)
self.timer = QTimer()
self.timer.timeout.connect(self.refresh)
#定义第一、二个LCD数、标准结果LCD数
for i in range(1,number_timu+1):
exec('self.lineEdit'+str(i)+ '='+ 'QtWidgets.QLineEdit(self.centralwidget)')#你的结果
exec('self.LCD'+str(i) +'='+ 'QtWidgets.QLCDNumber(self.centralwidget)')#第一个LCD数
exec('self.LCD'+str(i)+str(i) +'='+ 'QtWidgets.QLCDNumber(self.centralwidget)')#第二个LCD数
exec('self.LCD'+str(i)+str(i)+str(i) +'='+ 'QtWidgets.QLCDNumber(self.centralwidget)')#标准结果LCD数
exec('self.label'+str(i)+ '='+ 'QtWidgets.QLabel(self.centralwidget)')
exec('self.label_6'+str(i)+ '=' +'QtWidgets.QLabel(self.centralwidget)')
exec('self.label_7'+str(i)+ '=' +'QtWidgets.QLabel(self.centralwidget)')
exec('self.lineEditR'+str(i)+ '='+ 'QtWidgets.QLineEdit(self.centralwidget)')#除法的余数
exec('self.LCDR'+str(i)+str(i)+str(i) +'='+ 'QtWidgets.QLCDNumber(self.centralwidget)')#除法余数的LCD数
eval('self.LCD'+str(i)).setGeometry(QtCore.QRect(10, 170+45*(i-1), 50, 30))
eval('self.LCD'+str(i)+str(i)).setGeometry(QtCore.QRect(110, 170+45*(i-1), 50, 30))
eval('self.LCD'+str(i)+str(i)+str(i)).setGeometry(QtCore.QRect(360, 170+45*(i-1), 120, 30))
eval('self.LCDR'+str(i)+str(i)+str(i)).setGeometry(QtCore.QRect(630, 170+45*(i-1), 120, 30))
eval('self.lineEdit'+str(i)).setGeometry(QtCore.QRect(230, 170+45*(i-1), 120, 30))
eval('self.lineEdit'+str(i)).setReadOnly(True)
eval('self.lineEditR'+str(i)).setGeometry(QtCore.QRect(500, 170+45*(i-1), 120, 30))
eval('self.label'+str(i)).setGeometry(QtCore.QRect(500, 170+45*(i-1), 50, 30))
eval('self.label_6'+str(i)).setGeometry(QtCore.QRect(170, 170+45*(i-1), 50, 30))
eval('self.label_7'+str(i)).setGeometry(QtCore.QRect(60, 170+45*(i-1), 50, 30))
sizePolicy.setHeightForWidth(eval('self.LCD'+str(i)+str(i)).sizePolicy().hasHeightForWidth())
eval('self.LCD'+str(i)+str(i)).setSizePolicy(sizePolicy)
eval('self.LCD'+str(i)).setSizePolicy(sizePolicy)
eval('self.LCD'+str(i)+str(i)+str(i)).setSizePolicy(sizePolicy)
eval('self.lineEdit'+str(i)).setSizePolicy(sizePolicy)
eval('self.LCDR'+str(i)+str(i)+str(i)).setSizePolicy(sizePolicy)
eval('self.lineEditR'+str(i)).setSizePolicy(sizePolicy)
eval('self.label_6'+str(i)).setSizePolicy(sizePolicy)
eval('self.label_7'+str(i)).setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(16)
eval('self.LCD'+str(i)+str(i)).setFont(font)
eval('self.LCD'+str(i)+str(i)).setDigitCount(int(self.s1))
eval('self.LCD'+str(i)+str(i)).setObjectName("LCD"+str(i)+str(i))
eval('self.LCD'+str(i)).setFont(font)
eval('self.LCD'+str(i)).setDigitCount(int(self.s1))
eval('self.LCD'+str(i)).setObjectName("LCD"+str(i))
eval('self.LCD'+str(i)+str(i)+str(i)).setFont(font)
eval('self.LCD'+str(i)+str(i)+str(i)).setDigitCount(int(self.s3))
eval('self.LCD'+str(i)+str(i)+str(i)).setObjectName("LCD"+str(i)+str(i)+str(i))
eval('self.LCDR'+str(i)+str(i)+str(i)).setFont(font)
eval('self.LCDR'+str(i)+str(i)+str(i)).setDigitCount(int(self.s3))
eval('self.LCDR'+str(i)+str(i)+str(i)).setObjectName("LCDR"+str(i)+str(i)+str(i))
font1 = QtGui.QFont()
font1.setPointSize(16)
font1.setStyleStrategy(QtGui.QFont.PreferDefault)
eval('self.lineEdit'+str(i)).setFont(font1)
eval('self.lineEdit'+str(i)).setInputMethodHints(QtCore.Qt.ImhDigitsOnly)
eval('self.lineEdit'+str(i)).setAlignment(QtCore.Qt.AlignCenter)
eval('self.lineEdit'+str(i)).setObjectName("lineEdit"+str(i))
eval('self.lineEditR'+str(i)).setFont(font1)
eval('self.lineEditR'+str(i)).setInputMethodHints(QtCore.Qt.ImhDigitsOnly)
eval('self.lineEditR'+str(i)).setAlignment(QtCore.Qt.AlignCenter)
eval('self.lineEditR'+str(i)).setObjectName("lineEditR"+str(i))
eval('self.label_6'+str(i)).setFont(font)
eval('self.label_6'+str(i)).setAlignment(QtCore.Qt.AlignCenter)
eval('self.label_6'+str(i)).setObjectName("label_6"+str(i))
eval('self.label_7'+str(i)).setFont(font)
eval('self.label_7'+str(i)).setAlignment(QtCore.Qt.AlignCenter)
eval('self.label_7'+str(i)).setObjectName("label_7"+str(i))
font3 = QtGui.QFont()
font3.setPointSize(18)
eval('self.label'+str(i)).setFont(font3)
eval('self.label'+str(i)).setObjectName("label"+ str(i))
self.splitter = QtWidgets.QSplitter(self.centralwidget)
self.splitter.setGeometry(QtCore.QRect(60, 650, 331, 41))
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.pushButton = QtWidgets.QPushButton(self.splitter)
font = QtGui.QFont()
font.setPointSize(16)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.splitter)
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
self.splitter_2 = QtWidgets.QSplitter(self.centralwidget)
self.splitter_2.setGeometry(QtCore.QRect(60, 710, 301, 51))
self.splitter_2.setOrientation(QtCore.Qt.Horizontal)
self.splitter_2.setObjectName("splitter_2")
self.label_81 = QtWidgets.QLabel(self.splitter_2)
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(13)
self.label_81.setFont(font)
self.label_81.setAlignment(QtCore.Qt.AlignCenter)
self.label_81.setObjectName("label_81")
self.LCDgoal = QtWidgets.QLCDNumber(self.splitter_2)
sizePolicy.setHeightForWidth(self.LCDgoal.sizePolicy().hasHeightForWidth())
self.LCDgoal.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(16)
self.LCDgoal.setFont(font)
self.LCDgoal.setDigitCount(3)
self.LCDgoal.setObjectName("LCDgoal")
#用时结果显示
self.splitter_3 = QtWidgets.QSplitter(self.centralwidget)
self.splitter_3.setGeometry(QtCore.QRect(60, 770, 301, 51))
self.splitter_3.setOrientation(QtCore.Qt.Horizontal)
self.splitter_3.setObjectName("splitter_3")
self.label_82 = QtWidgets.QLabel(self.splitter_3)
font = QtGui.QFont()
font.setFamily("黑体")
font.setPointSize(13)
self.label_82.setFont(font)
self.label_82.setAlignment(QtCore.Qt.AlignCenter)
self.label_82.setObjectName("label_82")
self.label_90 = QtWidgets.QLCDNumber(self.splitter_3)
sizePolicy.setHeightForWidth(self.label_90.sizePolicy().hasHeightForWidth())
self.label_90.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(16)
self.label_90.setFont(font)
self.label_90.setDigitCount(3)
self.label_90.setObjectName("label_90")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(self.che)
self.pushButton_2.clicked.connect(self.fre)
#QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.setEnabled(False)
self.fre()
#设置倒计时提示标题
if (self.s1 == '1' or self.s1 == '3') and (self.s2 == '+' or self.s2 == '-'):
self.label_jishi.setText('一分钟倒计时:')
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '*':
self.label_jishi.setText('一分半钟倒计时:')
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '/':
self.label_jishi.setText('二分钟倒计时:')
if self.s1 == '2' and (self.s2 == '+' or self.s2 == '-'):
self.label_jishi.setText('一分半钟倒计时:')
if self.s1 == '2' and self.s2 == '*':
self.label_jishi.setText('三分钟倒计时:')
if self.s1 == '2' and self.s2 == '/':
self.label_jishi.setText('四分钟倒计时:')
#除法时多显示余数和余数LCD,label位置向右移动,否则不显示
if self.s2 == '/':
MainWindow.setFixedSize(820, 839)
for i in range(1,11):
eval('self.lineEditR'+str(i)).show()
eval('self.LCDR'+str(i)+str(i)+str(i)).show()
eval('self.label'+str(i)).setGeometry(QtCore.QRect(760, 170+45*(i-1), 50, 30))
else:
MainWindow.setFixedSize(570, 839)
for i in range(1,11):
eval('self.lineEditR'+str(i)).hide()
eval('self.LCDR'+str(i)+str(i)+str(i)).hide()
#限定输入答案框只能输入数字0-9999
if (self.s1 == '1' or self.s1 == '3') and (self.s2 == '+' or self.s2 == '-'):
IntValidator = QIntValidator()
IntValidator.setRange(0, 20)
#my_regex = QtCore.QRegExp("[0-9][0-9]")
#my_validator = QtGui.QRegExpValidator()
for i in range(1,11):
eval('self.lineEdit'+str(i)).setValidator(IntValidator)
eval('self.lineEditR'+str(i)).setValidator(IntValidator)
if (self.s1 == '1' or self.s1 == '3') and (self.s2 == '*' or self.s2 == '/'):
IntValidator = QIntValidator()
IntValidator.setRange(0, 100)
for i in range(1,11):
eval('self.lineEdit'+str(i)).setValidator(IntValidator)
eval('self.lineEditR'+str(i)).setValidator(IntValidator)
if self.s1 == '2' and (self.s2 == '+' or self.s2 == '-'):
IntValidator = QIntValidator()
IntValidator.setRange(0, 200)
for i in range(1,11):
eval('self.lineEdit'+str(i)).setValidator(IntValidator)
eval('self.lineEditR'+str(i)).setValidator(IntValidator)
if self.s1 == '2' and (self.s2 == '*' or self.s2 == '/'):
IntValidator = QIntValidator()
IntValidator.setRange(0, 9999)
for i in range(1,11):
eval('self.lineEdit'+str(i)).setValidator(IntValidator)
eval('self.lineEditR'+str(i)).setValidator(IntValidator)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "小学算术({}位数{}法)".format(('一' if self.s1=='1' else '一、二' if self.s1=='3' else '二'), ('加' if self.s2 == '+' else '减' if self.s2 == '-' else '乘' if self.s2=='*' else '除'))))
self.label1.setText(_translate("MainWindow", ""))
for i in range(1,11):
eval('self.label_6'+str(i)).setText(_translate("MainWindow", "="))
eval('self.label_7'+str(i)).setText(_translate("MainWindow", self.s4))
self.pushButton.setText(_translate("MainWindow", "提交试卷"))
self.pushButton_2.setText(_translate("MainWindow", "刷新题目"))
self.label_81.setText(_translate("MainWindow", "你的得分:"))
self.label_82.setText(_translate("MainWindow", "用时(秒):"))
点击开始之后倒计时代码如下:
#倒计时
```python
def counterClock(self):
global interval
if (self.s1 == '1' or self.s1 == '3') and (self.s2 == '+' or self.s2 == '-'):
interval = 60
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '*':
interval = 90
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '/':
interval = 120
if self.s1 == '2' and (self.s2 == '+' or self.s2 == '-'):
interval = 90
if self.s1 == '2' and self.s2 == '*':
interval = 180
if self.s1 == '2' and self.s2 == '/':
interval = 240
self.timer.start(1000)
self.start.setEnabled(False)
self.pushButton.setEnabled(True)
for i in range(1,number_timu+1):
eval('self.lineEdit'+str(i)).setReadOnly(False)
#self.fre()
for i in range(1,number_timu+1):
eval('self.LCD'+str(i)+str(i)+str(i)).display('')
eval('self.lineEdit'+str(i)).clear()
eval('self.LCDR'+str(i)+str(i)+str(i)).display('')
eval('self.lineEditR'+str(i)).clear()
eval('self.label'+str(i)).clear()
eval('self.label'+str(i)).setStyleSheet('color:black')
eval('self.lineEdit'+str(i)).setStyleSheet('color:black')
eval('self.lineEditR'+str(i)).setStyleSheet('color:black')
self.LCDgoal.display('')
self.label_90.display('')
#更新界面显示的倒计时
def refresh(self):
global interval
if interval >= 0:
#self.label_jishi_1.setText('01:00')
min = int(interval/60)
sec = interval%60
if sec < 10:
sec = '0'+str(sec)
else:
sec = str(sec)
intervals = '0'+str(min) + ':' + sec
self.label_jishi_1.setText(intervals)
interval -= 1
else:
self.timer.stop()
self.pushButton.setEnabled(False)
QMessageBox.information(self.centralwidget,'时间到','时间已到,如果没有提交,你将不能再提交!点击刷新题目重新开始。')
刷新题目的函数:
def fre(self):
self.start.setEnabled(True)
first = []
second = []
if self.s1 == '1':
first = ra.sample(range(0,10),number_timu) #避免生成相同的题目
second = ra.sample(range(0,10),number_timu) #避免生成相同的题目
if self.s1 == '2':
first = ra.sample(range(10,99),number_timu) #避免生成相同的题目
second = ra.sample(range(10,99),number_timu) #避免生成相同的题目
if self.s1 == '3':
first = ra.sample(range(10,100),number_timu) #避免生成相同的题目
second = ra.sample(range(0,10),number_timu) #避免生成相同的题目
cursor = ra.randint(1,9)
cur_list = ra.sample(range(0,9),cursor)
for cur in cur_list:
p = first[cur]
first[cur] = second[cur]
second[cur] = p
#避免出现小数减去大数结果是负数的情况,小学一二三四五年级还没学负数
if self.s2 == '-' or self.s2 == '/':
for i in range(10):
if first[i] < second[i]:
p = first[i]
first[i] = second[i]
second[i] = p
#避免大小数交换后出现相同题目的情况
for i in range(9):
for d in range(1,(10-i)):
if first[i] == first[i+d] and second[i] == second[i+d]:
second[i+d] = second[i+d] + 1
#除法的时候避免出现除数为0的情况
if self.s2 == '/':
for i in range(10):
if second[i] == 0:
second[i] = ra.randint(1,9)
if first[i] < second[i] and first[i] != 0:
p = first[i]
first[i] = second[i]
second[i] = p
if first[i] < second[i] and first[i] == 0:
p = first[i] + 1
first[i] = second[i]
second[i] = p
for i in range(1,number_timu+1):
eval('self.LCD'+str(i)+str(i)+str(i)).display('')
eval('self.lineEdit'+str(i)).clear()
eval('self.LCDR'+str(i)+str(i)+str(i)).display('')
eval('self.lineEditR'+str(i)).clear()
eval('self.lineEdit'+str(i)).setReadOnly(True)
exec('self.l'+str(i) +'='+ str(first[i-1]))
exec('self.l'+str(i)+str(i) +'='+ str(second[i-1]))
eval('self.LCD'+str(i)).display(eval('self.l'+str(i)))
eval('self.LCD'+str(i)+str(i)).display(eval('self.l'+str(i)+str(i)))
eval('self.label'+str(i)).clear()
self.LCDgoal.display('')
self.label_90.display('')
self.timer.stop()
self.label_jishi_1.setText('')
self.pushButton.setEnabled(False)
检查结果保存截图:
def che(self):
self.goal = 0#总分数
Time = time.strftime("%Y-%m-%d_%H-%M-%S",time.localtime())#保存题目和结果截图 用时间命名
def calculate():
for i in range(1,number_timu+1):
if eval('self.lineEdit'+str(i)).text() == '':
eval('self.label'+str(i)).setText("?")
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 0, 255);")
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
else:
n = int(eval('self.l'+str(i)+str(i)))
m = int(eval('self.l'+str(i)))
if eval('%d%s%d'%(m,self.s2,n)) == int(eval('self.lineEdit'+str(i)+'.text()')):
eval('self.label'+str(i)).setText("✔")
eval('self.LCD'+str(i)+str(i)+str(i)).display(eval('%d%s%d'%(m,self.s2,n)))
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 128, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:green')
self.goal += 10
else:
eval('self.label'+str(i)).setText("✘")
eval('self.label'+str(i)).setStyleSheet("color:rgb(255, 0, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:red')
eval('self.LCD'+str(i)+str(i)+str(i)).display(eval('%d%s%d'%(m,self.s2,n)))
#除法计算方式比较特殊,牵涉到整除和不能整除的余数的情况,分类讨论很复杂
def calculateR():
for i in range(1,number_timu+1):
if eval('self.lineEdit'+str(i)).text() == '':
eval('self.label'+str(i)).setText("?")
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 0, 255);")
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
else:
n = int(eval('self.l'+str(i)+str(i)))
m = int(eval('self.l'+str(i)))
#能够整除的情况
if m%n == 0:
if m/n == int(eval('self.lineEdit'+str(i)+'.text()')):
if eval('self.lineEditR'+str(i)+'.text()') == '':
eval('self.label'+str(i)).setText("✔")
eval('self.LCD'+str(i)+str(i)+str(i)).display(eval('%d%s%d'%(m,self.s2,n)))
eval('self.LCDR'+str(i)+str(i)+str(i)).display('0')
#eval('self.LCD'+str(i)+str(i)+str(i)).setSegmentStyle(QtWidgets.QLCDNumber.Flat)#Mac系统需要加上,否则下面的color不生效。
#eval('self.LCD'+str(i)+str(i)+str(i)).setStyleSheet("border: 2px solid black; color: green; background: silver;")
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 128, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:green')
self.goal += 10
else:
if int(eval('self.lineEditR'+str(i)+'.text()')) == 0:
eval('self.label'+str(i)).setText("✔")
eval('self.LCD'+str(i)+str(i)+str(i)).display(eval('%d%s%d'%(m,self.s2,n)))
eval('self.LCDR'+str(i)+str(i)+str(i)).display('0')
eval('self.lineEdit'+str(i)).setStyleSheet('color:green')
eval('self.lineEditR'+str(i)).setStyleSheet('color:green')
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 128, 0);")
self.goal += 10
else:
eval('self.label'+str(i)).setText("✘")
eval('self.label'+str(i)).setStyleSheet("color:rgb(255, 0, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:green')
eval('self.lineEditR'+str(i)).setStyleSheet('color:red')
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
eval('self.LCDR'+str(i)+str(i)+str(i)).display('')
else:
eval('self.label'+str(i)).setText("✘")
eval('self.label'+str(i)).setStyleSheet("color:rgb(255, 0, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:red')
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
eval('self.LCDR'+str(i)+str(i)+str(i)).display('')
else:
if int(m/n) != int(eval('self.lineEdit'+str(i)+'.text()')):
eval('self.label'+str(i)).setText("✘")
eval('self.label'+str(i)).setStyleSheet("color:rgb(255, 0, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:red')
eval('self.lineEditR'+str(i)).setStyleSheet('color:red')
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
else:
if eval('self.lineEditR'+str(i)).text() == '':
eval('self.label'+str(i)).setText("?")
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 0, 255);")
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
else:
if m%n == int(eval('self.lineEditR'+str(i)+'.text()')):
eval('self.label'+str(i)).setText("✔")
eval('self.LCD'+str(i)+str(i)+str(i)).display(str(int(m/n)))
eval('self.LCDR'+str(i)+str(i)+str(i)).display(str(m%n))
eval('self.label'+str(i)).setStyleSheet("color:rgb(0, 128, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:green')
eval('self.lineEditR'+str(i)).setStyleSheet('color:green')
self.goal += 10
elif m%n != int(eval('self.lineEditR'+str(i)+'.text()')):
eval('self.label'+str(i)).setText("✘")
eval('self.label'+str(i)).setStyleSheet("color:rgb(255, 0, 0);")
eval('self.lineEdit'+str(i)).setStyleSheet('color:red')
eval('self.lineEditR'+str(i)).setStyleSheet('color:red')
eval('self.LCD'+str(i)+str(i)+str(i)).display("")
if self.s2 == '+' or self.s2 == '*' or self.s2 == '-':
calculate()
self.timer.stop()
self.pushButton.setEnabled(False)
else:
calculateR()
self.timer.stop()
self.pushButton.setEnabled(False)
self.LCDgoal.display(self.goal)
if self.goal == 100:
self.LCDgoal.setStyleSheet("border: 2px solid black; color: green; background: silver;")
elif self.goal == 90:
self.LCDgoal.setStyleSheet("border: 2px solid black; color: blue; background: silver;")
elif self.goal >= 60 and self.goal < 90:
self.LCDgoal.setStyleSheet("border: 2px solid black; color: yellow; background: silver;")
else:
self.LCDgoal.setStyleSheet("border: 2px solid black; color: red; background: silver;")
#计算耗时
counter = self.label_jishi_1.text()
counter = counter.split(':')
counter_m = int(counter[0])
counter_s = int(counter[1])
counter_s_left = 60*counter_m + counter_s
if (self.s1 == '1' or self.s1 == '3') and (self.s2 == '+' or self.s2 == '-'):
remaind = 60 - counter_s_left
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '*':
remaind = 90 - counter_s_left
if (self.s1 == '1' or self.s1 == '3') and self.s2 == '/':
remaind = 120 - counter_s_left
if self.s1 == '2' and (self.s2 == '+' or self.s2 == '-'):
remaind = 90 - counter_s_left
if self.s1 == '2' and self.s2 == '*':
remaind = 180 - counter_s_left
if self.s1 == '2' and self.s2 == '/':
remaind = 240 - counter_s_left
self.label_90.display(remaind)
#提交之后,保存题目和结果截图
QApplication.processEvents()#刷新当前屏幕
screen = QApplication.primaryScreen()
pix = screen.grabWindow(self.centralwidget.window().winId())#截取当前屏幕并命名,然后保存在当前目录下
pix.save("{}位数{}法_{}.jpg".format(('一' if self.s1=='1' else '一、二' if self.s1=='3' else '二'), ('加' if self.s2 == '+' else '减' if self.s2 == '-' else '乘' if self.s2=='*' else '除'),Time))
这里要特别注意,需要刷新当前界面才能截图到分数、耗时、每道题正确与否
QApplication.processEvents()
另外截取当前widget,self.centralwidget.window().winId()
主代码:
-- coding: utf-8 --
Jump.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_welcom import Ui_Main
from Ui_welcom2 import Ui_Main2
class Ui_MainWindow(Ui_Main2):
def __init__(self, s):
self.s1 = s[0]
self.s2 = s[1]
self.s3 = 2
self.s4 = ('+' if self.s2 == '+' else '-' if self.s2 == '-' else '×' if self.s2 == '*' else '÷')
#主界面
class login(QtWidgets.QMainWindow,Ui_Main):
def init(self):
super(login,self).init()
self.setupUi(self)
#定义登录按钮的功能
def re(self, s):
self.MainWindow1 = QtWidgets.QMainWindow()
self.ui1 = Ui_MainWindow(s)
self.ui1.setupUi(self.MainWindow1)
self.MainWindow1.show()
#运行窗口Login
if name==“main”:
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QWidget()
ui = login()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())