2016-10-09 2 views
-2

내 코딩이고 내가 버튼을 클릭 할 때마다 "쇼 평균 마크"그것은 나에게 오류 여기파이썬 클래스와 객체, 목록의 내용을 표시하는 방법 그래서 아래

"Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\Mohammed\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__ 
    return self.func(*args) File "C:\Users\Mohammed\Downloads\homework5_201599618.py", line 67, in showAverage 
    for s in self.studentList: AttributeError: 'student' object has no attribute 'studentList' 

을 제공하는 것은 내 코드입니다 :

from tkinter import * 
from tkinter import ttk 



class student : 
    name = '' 
    number = 0 
    homework = 0 
    average = 0 


    def __init__(self, master): 


     self.master = master 
     master.title("student markList") 

     studentList = [] 

     self.label_1 = Label(master, text = "Add student name:") 
     self.label_2 = Label(master, text = "Add student number:") 
     self.label_3 = Label(master, text = "Add homework mark:") 
     self.label_4 = Label(master, textvariable=self.average) 

     self.label_1.grid(column=1, row=1, sticky = (W,E)) 
     self.label_2.grid(column=1, row=2, sticky = (W,E)) 
     self.label_3.grid(column=1, row=3, sticky = (W,E)) 
     self.label_4.grid(columnspan=3, row=8, sticky = (N,W,E,S)) 

     self.name = StringVar() 
     self.number = StringVar() 
     self.homework = StringVar() 
     self.average = StringVar() 

     self.name_input = ttk.Entry(master, textvariable=self.name).grid(column=2, row=1, sticky = (W,E)) 
     self.number_input = ttk.Entry(master, textvariable=self.number).grid(column=2, row=2, sticky = (W,E)) 
     self.homework_input = ttk.Entry(master, textvariable=self.homework).grid(column=2, row=3, sticky = (W,E)) 

     self.button_1 = Button(master, text = "Add Student Information", command=self.addStudent) 
     self.button_2 = Button(master, text = "List All Students", command=self.listAll) 
     self.button_3 = Button(master, text = "Show Average Mark", command=self.showAverage) 

     self.button_1.grid(column=2, row=4, sticky = (W,E)) 
     self.button_2.grid(column=2, row=5, sticky = (W,E)) 
     self.button_3.grid(column=2, row=6, sticky = (W,E)) 

     self.lb1 = Listbox(master) 
     self.lb1.grid(columnspan=3,row=7, sticky = (W,E)) 



    def addStudent(self, *args): 
     self.n = self.name.get() 
     self.num = self.number.get() 
     self.hw = self.homework.get() 
     self.studentList.append([self.n, self.num, self.hw]) 

    def listAll(self): 
     self.lb1.delete(0, END) 
     for s in self.studentList: 
      self.lb1.insert(END,s[0] + " " + s[1] + " = " + s[2]) 

    def showAverage(self): 

     self.total = 0 
     for s in self.studentList: 
      self.total += int(s[2]) 
     self.average.set(int(self.total/len(self.studentList))) 


root = Tk() 
gui_markList = student(root) 
root.mainloop() 

저는이 문제가 def (showAverage) 코딩 부분에 있다고 생각합니다. 누군가 도와 주시겠습니까? 이전

self.studentList.append([self.n, self.num, self.hw]) 

studentList가 정의되어야합니다/할당 된 값 : 당신의 __init__ 방법에서

+0

문제는 __init__''에 ... – jonrsharpe

답변

1

, 당신은 studentList = [] 당신이 할 때

1

self.studentList = []을 변경해야합니다. 당신이 무슨 짓을했는지 당신의 코드에서

가있다 :

def __init__(self, master): 


    self.master = master 
    master.title("student markList") 

    studentList = [] 

그래서 studentList이 자기에게 할당되지 않은/결과 self.studentList 같은 개체가 정의되어 있지 않습니다.

당신은 같이 수정 해결할 수 있습니다 : 당신은 인스턴스 속성을 '로컬하지 studentList` 만드는

def __init__(self, master): 


    self.master = master 
    master.title("student markList") 

    self.studentList = [] 
관련 문제