无法使用tkinter在测验中增加sqlite数据库中的问题

问题描述 投票:-1回答:1

我还在研究我的测验程序,但我目前遇到的问题是让程序增加从我也拥有的数据库中检索到的问题。当我尝试移动到我的数据库中的下一条记录时,我无法真正更改页面的内容,一切都保持不变,我到目前为止还没有能够纠正这个问题。我觉得好像使用变量是一个问题,但我无法想到这个问题。这是我的代码部分,我遇到了这个问题:

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))

我不知道我怎么能试着让页面的内容改变,但我希望我可以向其他人学习,因为我周围的人都没有帮助(包括老师),这是最好的选择我有。在此先感谢您的帮助。

python python-3.x sqlite tkinter
1个回答
0
投票

我无法测试它,但我会做类似的代码。

__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)
© www.soinside.com 2019 - 2024. All rights reserved.