При вызове определенных переменных экземпляра из любого из моих методов экземпляра я получаю ошибку атрибуции о том, что рассматриваемая переменная экземпляра не существует. Предполагается, что эта программа является графическим интерфейсом для викторины и без вызова «вопросительный знак» работает без ошибок.
Я пытался обойти эту проблему множеством способов, включая помещение вопросительной метки в собственный метод экземпляра, а затем вызвал указанный метод из radio_btn_gen, который работал, но означал, что у меня возникли проблемы с его удалением на конечном экране, и в результате у меня заболела голова,Я просматривал переполнение стека, пытаясь найти что-то похожее на мою проблему, но большинство ошибок атрибутов, как правило, имеют ошибки правописания.
import tkinter as tk
LARGEFONT=("Impact",72)
SMALLFONT=("Verdana",12)
class QuizApp():
def __init__(self,parent):
self.qNa=(("question","answer","answer","answer"), ("question","answer","answer","answer"))#List of questions and answers
self.correctanswers=("answer")#All the correct answers
self.v = tk.StringVar()#stringVar for radiobuttons
self.page=0
self.radiobtnsframe=0
self.v.set("n/a")
self.rblist=[]
self.attemptlist=[]#stores all the attempts made on the quiz
self.radio_btn_gen()
#above are the variables used for managing the radio button list
self.questionlabel=tk.Label(parent,text=self.qNa[self.page][0],font=SMALLFONT)
self.rightlabel=tk.Label(font=SMALLFONT)#Displays correct answers at the end of quiz
self.confirmlabel = tk.Label(parent, textvariable = self.v) #tkinter converts IntVar to text for textvariable
self.confirmlabel.grid(row=1,column=1)
self.nxtbtn=tk.Button(text="Next",font=SMALLFONT,command=self.nxt_btn_cmd)#Changes the page to the next question when pressed
self.nxtbtn.grid(row=4,column=0)
def radio_btn_gen(self):
self.questionlabel.grid(row=0,column=0)#Creates the question label in the gui
self.radiobtnsframe=tk.Frame(relief="flat",borderwidth=2)# the frame that holds the radiobuttons
for i in self.qNa[self.page][1:]:#Iterates through inner lists of 'qNa' list and loads the radiobuttons into 'radiobtnsframe'
self.rb = tk.Radiobutton(master=self.radiobtnsframe,variable = self.v, value = i,
text= i,indicatoron=False,font=SMALLFONT)
self.rblist.append(self.rb)
self.rb.pack(fill="both")
self.radiobtnsframe.grid(row=1,column=0)
self.v.set("n/a")
def nxt_btn_cmd(self):#command called when next button pushed
rbvalue=self.v.get()#calls 'v' and assigns it to rbValue
if rbvalue != "n/a":#checks to see if any radiobuttons have been pushed
self.page+=1#increments page number
if self.page+1 > len(self.qNa):#checks to see if page number matches the number of questions
correctattempts=[i for i, j in zip(self.attemptlist, self.correctanswers) if i == j]#used to sort the correct answers into a list
self.rightlabel.config(text="you got {} questions right".format(len(correctattempts)))#displays how many answers you got right
self.rightlabel.grid(row=0,column=0)#No issue when called
self.radiobtnsframe.destroy()
self.confirmlabel.destroy()#similar label with no error attached when called
self.questionlabel.destroy()#attribute error when 'questionlabel' called
return #terminates method before executing the commands below
self.attemptlist.append(rbvalue)
self.radiobtnsframe.destroy()
self.radio_btn_gen()
del self.rblist[:]#clears the list storing the radiobutton data
if __name__ == "__main__":
root=tk.Tk()
app=QuizApp(root)#calls the app
root.mainloop
Код ошибки
Exception has occurred: AttributeError
'QuizApp' object has no attribute 'questionlabel'
File "C:\Users\jrich\Documents\stackoverflowquestion.py", line 29, in radio_btn_gen
self.questionlabel.grid(row=0,column=0)#Creates the question label in the gui
File "C:\Users\jrich\Documents\stackoverflowquestion.py", line 16, in __init__
self.radio_btn_gen()
File "C:\Users\jrich\Documents\stackoverflowquestion.py", line 61, in <module>
app=QuizApp(root)
Если кто-то может заметить какие-либо другие проблемы в моем коде и хотел бы сообщить о них, я был бы очень признателен. если что-то кажется запутанным или неуместным, я все еще учусь, и у моего учителя есть «интересный» способ кодирования, если не сказать больше. Заранее благодарим за любую помощь, которую вы можете оказать.