У меня есть программа, которая выполняет переключение кадров, как в этом примере: Переключение между двумя кадрами в tkinter
Я пытаюсь сделать так, чтобы часть моей программы переключала кадры через функцию, где команда для переключения кадров находится внутри другой функции, а не кнопки.
Это функция переключения кадра:
class MathsApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame=None
self.switch_frame(StartPage)
self.title("Maths Revision App")
self.geometry("800x500")
self.configure(bg="white")
def switch_frame(self, frame_class):
#Destroys current frame and replaces it with a new one.
new_frame=frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame=new_frame
self._frame.pack(fill="both",expand=True)
Это функция, которую я пытаюсь получить для переключения кадров:
def validateAns(ans):
global questionpages,currentQ
if ans=="":
self.switch_frame(errorPage)
else:
if currentQ==9:
checkAns(ans, currentQ)
getTimes()
self.switch_frame(ResultPage)
else:
checkAns(ans, currentQ)
getTimes()
currentQ=currentQ+1
self.switch_frame(questionpages[currentQ])
Все остальное с этой функцией работает, кроме строк switch_frame.
Это один из кадров, который использует эту функцию:
class q1(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, bg="white")
lbl=tk.Label(self, text="Question 1", font=title_font, bg="white", fg="#004d99")
lbl.place(x=30, y=20)
txt=tk.Text(self, height=7, width=70)#the text box that displays the question
txt.config(state="normal")
txt.insert(tk.INSERT,qlist[0][0])
txt.config(state="disabled")
txt.place(x=35,y=125)
ans=tk.Entry(self)
ans.place(x=650, y=350,height=25)
btn=tk.Button(self, text="Next", height=3, width=15, fg="white", bg="#004d99", command=lambda:validateAns(ans.get()))
btn.place(x=650, y=400)
Когда я нажимаю кнопку в кадре q1, в котором используется «validateAns», я получаю сообщение об ошибке «имя« я »не определено». Я попытался заменить self.switch_frame на «master.switch_frame» и получил похожую ошибку, но «master» не был определен.
В зависимости от значения, переданного в функцию validateAns, страница / фрейм должны переключиться на один из трех различных.