def __init__(self, parent=None): super(Main, self).__init__(parent) #initialize variables self.valueOne = '0' self.valueTwo = '0' self.operaspeak = '+' self.opera = '+' self.level = 1 #gui setup self.mathUi = Ui_Form() self.mathUi.setupUi(self) #connect widgets with functions self.mathUi.operatorCombo.currentIndexChanged.connect(self.operatorSelect) self.mathUi.vspinBox1.valueChanged.connect(self.value1Select) self.mathUi.vspinBox2.valueChanged.connect(self.value2Select) self.mathUi.showButton.clicked.connect(self.showButtonClick) self.mathUi.nextlButton.clicked.connect(self.nextButtonClick) self.mathUi.previouslButton.clicked.connect(self.previousButtonClick) #timer to check response time self.ctimer = QTimer() QObject.connect(self.ctimer, SIGNAL("timeout()"), self.timeUp) #groupboxes for levels in a list self.gBtop = [self.mathUi.gBtop1,self.mathUi.gBtop2,self.mathUi.gBtop3,self.mathUi.gBbot,self.mathUi.toolsgB] #labels for levels self.tLabel1 = [self.mathUi.label11,self.mathUi.label12,self.mathUi.labela1] self.tLabel2 = [self.mathUi.label21,self.mathUi.label22,self.mathUi.labela2] self.tLabel3 = [self.mathUi.label31,self.mathUi.label32,self.mathUi.labela3] #operator for levels self.operator = [self.mathUi.operator1,self.mathUi.operator2,self.mathUi.operator3] #toplabel & bottomlabel self.tLabel = [self.tLabel1,self.tLabel2,self.tLabel3] self.bLabel = [self.mathUi.blabel0,self.mathUi.blabel1,self.mathUi.blabel2,self.mathUi.blabel3,self.mathUi.blabel4,self.mathUi.blabel5,self.mathUi.blabel6,self.mathUi.blabel7,self.mathUi.blabel8,self.mathUi.blabel9] #set hide top groupbox initially for i in self.gBtop[:4]: i.setHidden(True) #get a random number self.rand3num = randint(1,9) self.rand = randint(0,2) #some final beautificaion...;-D palette = self.palette() pixmap = QPixmap("images/back.jpg") brush = QBrush() brush.setTexture(pixmap) palette.setBrush(QPalette.Background, brush) self.setPalette(palette) self.setWindowTitle('pyABAmath') self.setGeometry(width/2-self.width()/2,height/2-self.height()/2,780,600) self.setFixedSize(780,600)
class Main(QWidget): def __init__(self, parent=None): super(Main, self).__init__(parent) #initialize variables self.valueOne = '0' self.valueTwo = '0' self.operaspeak = '+' self.opera = '+' self.level = 1 #gui setup self.mathUi = Ui_Form() self.mathUi.setupUi(self) #connect widgets with functions self.mathUi.operatorCombo.currentIndexChanged.connect(self.operatorSelect) self.mathUi.vspinBox1.valueChanged.connect(self.value1Select) self.mathUi.vspinBox2.valueChanged.connect(self.value2Select) self.mathUi.showButton.clicked.connect(self.showButtonClick) self.mathUi.nextlButton.clicked.connect(self.nextButtonClick) self.mathUi.previouslButton.clicked.connect(self.previousButtonClick) #timer to check response time self.ctimer = QTimer() QObject.connect(self.ctimer, SIGNAL("timeout()"), self.timeUp) #groupboxes for levels in a list self.gBtop = [self.mathUi.gBtop1,self.mathUi.gBtop2,self.mathUi.gBtop3,self.mathUi.gBbot,self.mathUi.toolsgB] #labels for levels self.tLabel1 = [self.mathUi.label11,self.mathUi.label12,self.mathUi.labela1] self.tLabel2 = [self.mathUi.label21,self.mathUi.label22,self.mathUi.labela2] self.tLabel3 = [self.mathUi.label31,self.mathUi.label32,self.mathUi.labela3] #operator for levels self.operator = [self.mathUi.operator1,self.mathUi.operator2,self.mathUi.operator3] #toplabel & bottomlabel self.tLabel = [self.tLabel1,self.tLabel2,self.tLabel3] self.bLabel = [self.mathUi.blabel0,self.mathUi.blabel1,self.mathUi.blabel2,self.mathUi.blabel3,self.mathUi.blabel4,self.mathUi.blabel5,self.mathUi.blabel6,self.mathUi.blabel7,self.mathUi.blabel8,self.mathUi.blabel9] #set hide top groupbox initially for i in self.gBtop[:4]: i.setHidden(True) #get a random number self.rand3num = randint(1,9) self.rand = randint(0,2) #some final beautificaion...;-D palette = self.palette() pixmap = QPixmap("images/back.jpg") brush = QBrush() brush.setTexture(pixmap) palette.setBrush(QPalette.Background, brush) self.setPalette(palette) self.setWindowTitle('pyABAmath') self.setGeometry(width/2-self.width()/2,height/2-self.height()/2,780,600) self.setFixedSize(780,600) #self.resize(780, 600) #function level 1 def level1(self,num,valueOne,valueTwo,operator): self.tLabel[num][0].setText(valueOne) self.tLabel[num][1].setText(valueTwo) self.operator[num].setText(operator) if str(self.opera) == '+': self.ans = str(int(valueOne)+int(valueTwo)) else: self.ans = str(int(valueOne)-int(valueTwo)) self.tLabel[num][2].setText(self.ans) self.gBtop[num].setHidden(False) self.children()[num].setStyleSheet("QGroupBox { border:2px solid rgb(255, 255, 255); }") app.processEvents() self.gBtop[num].mousePressEvent = self.gBtopMousefun#[num] self.speakFun(self.valueOne,self.operaspeak,self.valueTwo,self.ans) #function level 2 def level2(self,num,valueOne,valueTwo,operator): if valueOne == 0 or valueTwo == 0: initvalue = 0 num1,num2 = 0 else: initvalue = -9 num1 = randint(initvalue,int(valueOne)) num2 = randint(initvalue,int(valueTwo)) self.tLabel[num][0].setText(str(num1)) self.tLabel[num][1].setText(str(num2)) self.operator[num].setText(operator) if str(self.opera) == '+': self.ans = str(num1+num2) else: self.ans = str(num1-num2) self.tLabel[num][2].setText(self.ans) self.gBtop[num].setHidden(False) self.gBtop[num].mousePressEvent = self.gBtopMousefun2#[num] self.children()[num].setStyleSheet("QGroupBox { border:2px solid rgb(255, 255, 255); }") #function level 3 def level3(self,num,valueOne,valueTwo,operator): self.tLabel[num][2].setText("") self.tLabel[num][0].setText(valueOne) self.tLabel[num][1].setText(valueTwo) self.operator[num].setText(operator) if str(self.opera) == '+': self.ans = str(int(valueOne)+int(valueTwo)) else: self.ans = str(int(valueOne)-int(valueTwo)) self.bLabel[self.rand3num].setText(self.ans) self.bLabel[self.rand3num].setStyleSheet("QLabel { border:2px solid rgb(255, 255, 255); }") self.mathUi.gBbot.setHidden(False) self.gBtop[num].setHidden(False) app.processEvents() self.bLabel[self.rand3num].mousePressEvent = self.gBtopMousefun3#[num] self.speakFun(self.valueOne,self.operaspeak,self.valueTwo,self.ans) #function level 4 def level4(self,valueOne,valueTwo): self.bLabel[self.rand3num].setStyleSheet("QLabel {border:0px solid rgb(255, 255,0);") app.processEvents() if valueOne == '0': startnum = -9 stopnum = -1 for i in self.bLabel: i.setText(str(randint(startnum,stopnum))) i.setStyleSheet("QLabel { border:2px solid rgb(255, 255, 255); }") i.mousePressEvent = self.gBtopMousefun4 self.rand3num = randint(1,9) #this function makes the app talking.. def speakFun(self,valueOne,operaspeak,valueTwo,ans): self.setCursor(QCursor(Qt.BlankCursor)) #os.system("espeak 'say'") os.system("espeak 'say with me' -s 130 -p 100 -a 20") os.system("espeak"+' '+ str(self.valueOne)+' -s 150 -p 100 -a 30') os.system("espeak"+' '+ str(self.operaspeak)+' -s 120 -p 90 -a 30') os.system("espeak"+' '+ str(self.valueTwo)+' -s 150 -p 90 -a 30') os.system("espeak 'equals' -s 150 -p 90 -a 30") if self.level =='3' or self.level == '4': pass else: if self.ans[0] != '-': os.system("espeak"+' '+ str(self.ans)+' -s 150 -p 100 -a 30') else: os.system("espeak"+' '+ 'minus'+str(self.ans[1])+' -s 150 -p 100 -a 30') self.ctimer.start(9000) self.unsetCursor() app.processEvents() #check mouse clicked answer in level 1 def gBtopMousefun(self,event): self.splash() app.processEvents() self.children()[self.rand].setStyleSheet("QGroupBox { border:0px solid rgb(255, 255,0); }") if event.button() != Qt.LeftButton: event.ignore() return self.children()[self.rand].setHidden(True) self.rand = randint(0,2) if self.level == '1': self.level1(self.rand,self.valueOne,self.valueTwo,self.opera) elif self.level == '2': for i in range(0,3): if i == self.rand: pass else: self.level2(i,self.valueOne,self.valueTwo,self.opera) self.level1(self.rand,self.valueOne,self.valueTwo,self.opera) #check mouse clicked wrong answer in level 2 def gBtopMousefun2(self,event): self.ctimer.stop() os.system("espeak 'wrong answer please try again!' -s 150 -p 90 -a 20") self.ctimer.start(9000) #check mouse clicked answer in level 3 def gBtopMousefun3(self,event): self.bLabel[self.rand3num].setText("") self.bLabel[self.rand3num].setStyleSheet("QLabel {border:0px solid rgb(255, 255,0);") self.ctimer.stop() if self.ans[0] != '-': os.system("espeak"+' '+ str(self.ans)+' -s 150 -p 100 -a 20') else: os.system("espeak"+' '+ 'minus'+str(self.ans[1])+' -s 150 -p 100 -a 20') self.tLabel[self.rand][2].setText(self.ans) app.processEvents() self.splash() app.processEvents() #sleep(2) if self.level == '4': self.level4(self.valueOne,self.valueTwo) self.children()[self.rand].setHidden(True) self.rand = randint(0,2) self.rand3num = randint(1,9) self.level3(self.rand,self.valueOne,self.valueTwo,self.opera) self.ctimer.start(9000) #check mouse clicked wrong answer in level 4 def gBtopMousefun4(self,event): os.system("espeak 'wrong answer please try again' -s 150 -p 90 -a 20") #blink after some time to point the answer def timeUp(self): if self.level == "3" or self.level == "4": box = "QLabel" nu = self.rand3num child = self.bLabel else: nu = self.rand box = "QGroupBox" child = self.children() child[nu].setStyleSheet(box+" { border:3px solid rgb(255, 255, 255); }") app.processEvents() sleep(0.5) child[nu].setStyleSheet(box+" { border:3px solid rgb(255, 0, 255); }") app.processEvents() sleep(0.75) child[nu].setStyleSheet(box+"{ border:3px solid rgb(0, 255, 255); }") app.processEvents() sleep(1) child[nu].setStyleSheet(box+" { border:3px solid rgb(255, 255,0); }") app.processEvents() self.speakFun(self.valueOne,self.operaspeak,self.valueTwo,self.ans) #fill operator combobox def operatorSelect(self,i): operators = ['plus','minus'] self.operaspeak = operators[i] self.opera = str(self.mathUi.operatorCombo.currentText()) #value1 value def value1Select(self,i): self.valueOne = str(i) #value2 value def value2Select(self,i): self.valueTwo = str(i) #showButton clicked def showButtonClick(self,checked): if checked == False: self.mathUi.toolsgB.setHidden(True) self.level = self.mathUi.levelLabel.text()[-1] if self.level == '1': self.level1(self.rand,self.valueOne,self.valueTwo,self.opera) elif self.level == '2': for i in range(0,3): if i == self.rand: pass else: self.level2(i,self.valueOne,self.valueTwo,self.opera) self.level1(self.rand,self.valueOne,self.valueTwo,self.opera) elif self.level == '3': self.level3(self.rand,self.valueOne,self.valueTwo,self.opera) elif self.level == '4': self.level4(self.valueOne,self.valueTwo) self.level3(self.rand,self.valueOne,self.valueTwo,self.opera) self.ctimer.start() else: self.mathUi.toolsgB.setHidden(False) self.ctimer.stop() self.children()[self.rand].setStyleSheet("QGroupBox { border:0px solid rgb(255, 255,0); }") #click to go to previous level def previousButtonClick(self): self.level = int(self.level) if self.level == 4 : for i in self.bLabel: i.setText(" ") i.setStyleSheet("QLabel {border:0px solid rgb(255, 255,0);") if self.level != 0: self.level -=1 else: self.level = 0 for i in self.gBtop[:4]: i.setHidden(True) self.mathUi.levelLabel.setText('Level'+' '+str(self.level)) self.update() #click to go to next level def nextButtonClick(self): self.level = int(self.level) if self.level != 4: self.level +=1 else: self.level = 4 for i in self.gBtop[:4]: i.setHidden(True) self.mathUi.levelLabel.setText('Level'+" "+str(self.level)) self.update() #if correct answer show a shining/smiling star... :-P def splash(self): splashPix = QPixmap("images/splash.png") splash = QSplashScreen(splashPix,Qt.WindowStaysOnTopHint) splash.show() app.processEvents() os.system("espeak 'good job' -s 150 -p 90 -a 20") sleep(1) splash.close()