2016-04-26 8 views
0

Also ich bin neu zu tKinter sowie Klassen in Python zu dem Grad, ich verwende sie hier. Ich habe viel zu diesem Thema geforscht, aber es fällt mir schwer, alles zusammen zu stellen. Die Frage ist; Ich habe Def-Funktionen unter meiner Hauptklasse, die erste ist def class_Window (die ein Tabellenblatt erstellt) und die andere ist def-Schaltflächen (im Wesentlichen alle meine Schaltflächen zu halten, die ich erstelle). Ich bin dabei, eine Schaltfläche zum Speichern der Tabelle mit tkintertable.Tables.TableCanvas speichern Funktion mit macht eine Gurke-Datei. Für das Leben von mir kann ich nicht herausfinden, wie man die Schaltfläche mit der Tabellenklasse in der Definitionsfunktion verbindet.Verknüpfen eines tKinter Button über Klassen

Die Fehler, die ich bekomme, sind ungültige Syntax oder hat kein Attribut.

Jede Hilfe, wie dies in zu bekommen kommen würde groß sein

class AccuracyAssessmentApp: 
def __init__(self, parent=Tk()): 
    self.mainWindow = (parent) 
    self.mainWindow.title("Accuracy Assessment") 
    self.mainWindow.geometry("1000x700") 
    self.make_txt() 
    self.pos_lbl() 
    self.buttons() 
    self.class_Window() 
    self.title_label() 


def make_txt(self): 
    self.text = Text(self.mainWindow, width = 80, height = 40, background = "#A8A8A8") 
    self.text.pack(expand = TRUE, fill = BOTH) 


def pos_lbl(self): 
    self.pos = Label(self.mainWindow, text = "0,0") 
    self.pos.place(x=0, y=0) 

    self.pos1 = Label(self.mainWindow, text = "0,350") 
    self.pos1.place(x=0, y=350) 

    self.pos2 = Label(self.mainWindow, text = "500,0") 
    self.pos2.place(x=500, y=0) 

def class_Window(self): 
    self.tableFrame = Frame() 
    self.tableFrame.place(x=680,y=200) 
    self.table = TableCanvas(self.tableFrame, rows=30,cols=2, width=240) 
    self.table.createTableFrame() 

def title_label(self): 
    self.titleFrame = Frame(self.mainWindow, bg= '#4A766E', relief="raised", bd=10) 
    self.titleFrame.place(x=385, y=20) 
    self.title = Label(self.titleFrame, text=("""Accuracy Assessment"""), font=LARGE_FONT, bg= '#4A766E', fg="white", justify="center") 
    self.title.pack(pady=10, padx=10) 

def buttons(self): 
    Button(self.mainWindow, text="Quit", command=self.mainWindow.destroy).place(x=10,y=665) 
    Button(self.mainWindow, text="Save", command=self.table.save("AssessmentTable")) 

Dies ist der Fehler erhalte ich:

runfile('I:/Custom_Scripts/Personal/AccuracyAssessment/AccuracyAssessment_v2.py', wdir='I:/Custom_Scripts/Personal/AccuracyAssessment') 
Traceback (most recent call last): 

    File "<ipython-input-1-d9c198c0cd24>", line 1, in <module> 
    runfile('I:/Custom_Scripts/Personal/AccuracyAssessment/AccuracyAssessment_v2.py', wdir='I:/Custom_Scripts/Personal/AccuracyAssessment') 

    File "C:\Users\jpc08005\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile 
    execfile(filename, namespace) 

    File "C:\Users\jpc08005\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "I:/Custom_Scripts/Personal/AccuracyAssessment/AccuracyAssessment_v2.py", line 79, in <module> 
    app = AccuracyAssessmentApp() 

    File "I:/Custom_Scripts/Personal/AccuracyAssessment/AccuracyAssessment_v2.py", line 41, in __init__ 
    self.buttons() 

    File "I:/Custom_Scripts/Personal/AccuracyAssessment/AccuracyAssessment_v2.py", line 75, in buttons 
    Button(self.mainWindow, text="Save", command=self.table.save("AssessmentTable")) 

AttributeError: AccuracyAssessmentApp instance has no attribute 'table' 
+0

Bitte einen tatsächlichen Fehler anzeigen. Der Fehler und die Rückverfolgung haben spezifische Informationen, die beschreiben, wo das Problem liegt und wo das Problem liegt. –

+1

bitte nicht in den Kommentaren. Sie können Ihre Frage bearbeiten. –

Antwort

0

diesen Code vor:

Button(..., command=self.table.save("AssessmentTable")) 

Sie sind sofort Aufruf self.table.save("AssessmentTable") bei der Zeit die Schaltfläche erstellt wird. Dies wird aufgerufen, bevor self.table erstellt wurde. Daher erhalten Sie den Attributfehler.

Sie müssen nur self.table.save aufrufen, wenn Sie auf die Schaltfläche klicken. Die einfachste Lösung besteht darin, eine Funktion zu erstellen, die die Tabelle speichert und dann auf diese Schaltfläche im Rückruf verweist:

+0

Danke. Es hat perfekt funktioniert. Da es für Klassen noch neu war, war dies eine großartige Lösung, um zu sehen, wie es durchgeht. – Jake