我还在研究我的测验程序,但我目前遇到的问题是让程序增加从我也拥有的数据库中检索到的问题。当我尝试移动到我的数据库中的下一条记录时,我无法真正更改页面的内容,一切都保持不变,我到目前为止还没有能够纠正这个问题。我觉得好像使用变量是一个问题,但我无法想到这个问题。这是我的代码部分,我遇到了这个问题:
class ques(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
fetchrecNum = "SELECT MAX(qnumber) FROM questions"
cursor.execute(fetchrecNum)
self.recNum=str(cursor.fetchall())
self.recNum=self.recNum.strip("[('")
self.recNum=self.recNum.strip("',)]")
self.recNum=int(self.recNum)
recordNum = tk.Label(self, text = self.recNum)
recordNum.pack()
self.Qn = 1
self.quizScore = 0
fetchQ = "SELECT questioncontent FROM questions WHERE qnumber=?"
cursor.execute(fetchQ, [self.Qn])
Q=str(cursor.fetchall())
Q=Q.strip("[('")
Q=Q.strip("',)]")
question = tk.Label(self, text = Q)
question.pack()
fetchA1 = "SELECT qanswer1 FROM questions WHERE qnumber=?"
cursor.execute(fetchA1, [self.Qn])
A1=str(cursor.fetchall())
A1=A1.strip("[('")
A1=A1.strip("',)]")
answer1 = tk.Label(self, text = A1)
answer1.pack()
fetchA2 = "SELECT qanswer2 FROM questions WHERE qnumber=?"
cursor.execute(fetchA2, [self.Qn])
A2=str(cursor.fetchall())
A2=A2.strip("[('")
A2=A2.strip("',)]")
answer2 = tk.Label(self, text = A2)
answer2.pack()
fetchA3 = "SELECT qanswer3 FROM questions WHERE qnumber=?"
cursor.execute(fetchA3, [self.Qn])
A3=str(cursor.fetchall())
A3=A3.strip("[('")
A3=A3.strip("',)]")
answer3 = tk.Label(self, text = A3)
answer3.pack()
fetchA4 ="SELECT qanswer4 FROM questions WHERE qnumber=?"
cursor.execute(fetchA4, [self.Qn])
A4=str(cursor.fetchall())
A4=A4.strip("[('")
A4=A4.strip("',)]")
answer4 = tk.Label(self, text = A4)
answer4.pack()
fetchcA ="SELECT correctans FROM questions WHERE qnumber=?"
cursor.execute(fetchcA, [self.Qn])
self.cA=str(cursor.fetchall())
self.cA=self.cA.strip("[('")
self.cA=self.cA.strip("',)]")
def confirmAnswer(self):
answerGiven = self.enterAnswer
correctAnswer = self.cA
if answerGiven == correctAnswer:
self.rightOrWrong.configure(text ="Correct")
self.quizScore = (self.quizScore + 1)
else:
self.rightOrWrong.configure(text="Incorrect")
if self.Qn < self.recNum:
self.Qn = (self.Qn+1)
lambda: controller.show_frame(ques)
else:
self.rightOrWrong.configure(text="Quiz Complete! Your score was: " + str(self.quizScore))
我不知道我怎么能试着让页面的内容改变,但我希望我可以向其他人学习,因为我周围的人都没有帮助(包括老师),这是最好的选择我有。在此先感谢您的帮助。
我无法测试它,但我会做类似的代码。
在__init__
中,我创建了空标签并执行分离的方法,该方法从数据库中读取数据并将它们放入标签中。后来我可以使用这种方法来获得下一个问题。
要从数据库中获取一行,您可以使用fetchone()
。要从行获取数据,您不必使用str()
和strip()
,而是索引row[0]
,row[1]
等。如果在数据库中有不同顺序的列,则可能必须更改索引。
class ques(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.Qn = 1
self.quizScore = 0
self.correctAnswer = '' # <-- create it at start (and use better name)
# v-- create empty labels
self.recordNum = tk.Label(self, text='')
self.recordNum.pack()
self.question = tk.Label(self, text='')
self.question.pack()
self.answer1 = tk.Label(self, text='')
self.answer1.pack()
self.answer2 = tk.Label(self, text='')
self.answer2.pack()
self.answer3 = tk.Label(self, text='')
self.answer3.pack()
self.answer4 = tk.Label(self, text='')
self.answer4.pack()
self.update_question_number() # <-- get question number
self.update_question() # <-- get new question
def update_question_number(self)
# Get question's number
query = "SELECT MAX(qnumber) FROM questions"
cursor.execute(query)
row = cursor.fetchone()
self.recordNum['text'] = row[0]
def update_question(self):
# Get new question
query = "SELECT * FROM questions WHERE qnumber=?"
cursor.execute(query, (self.Qn,))
row = cursor.fetchone()
self.question['text'] = row[0]
self.answer1['text'] = row[1]
self.answer2['text'] = row[2]
self.answer3['text'] = row[3]
self.answer4['text'] = row[4]
self.correctAnswer = row[5]
def confirmAnswer(self):
if self.enterAnswer == self.correctAnswer:
self.rightOrWrong['text'] = "Correct"
self.quizScore += 1
else:
self.rightOrWrong['text'] = "Incorrect"
if self.Qn < self.recNum:
self.Qn += 1 # <-- get new question
self.update_question() # <-- get new question
#lambda: controller.show_frame(ques) # ??? do you have to change frame ???
else:
self.rightOrWrong.['text'] = "Quiz Complete! Your score was: {}".format(self.quizScore)