PYQT5 小学算术

刚开始学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_())

github链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值