Ошибка атрибута при вызове переменной экземпляра в методе экземпляра - PullRequest
0 голосов
/ 16 октября 2019

При вызове определенных переменных экземпляра из любого из моих методов экземпляра я получаю ошибку атрибуции о том, что рассматриваемая переменная экземпляра не существует. Предполагается, что эта программа является графическим интерфейсом для викторины и без вызова «вопросительный знак» работает без ошибок.

Я пытался обойти эту проблему множеством способов, включая помещение вопросительной метки в собственный метод экземпляра, а затем вызвал указанный метод из 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)

Если кто-то может заметить какие-либо другие проблемы в моем коде и хотел бы сообщить о них, я был бы очень признателен. если что-то кажется запутанным или неуместным, я все еще учусь, и у моего учителя есть «интересный» способ кодирования, если не сказать больше. Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 16 октября 2019
        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)

В radio_btn_gen вы пытаетесь получить доступ к self.questionlabel, но в __init__ вы вызываете этот метод перед установкой self.questionlabel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...