2016-04-26 12 views
0

私はtKinterの新人であり、ここでそれらを使用している程度にはPythonでクラスを使用しています。私はこの話題について多くの研究を行ってきましたが、私はそれをすべてまとめるのに苦労しています。質問は;私はメインクラスの下でdef関数を持っています。最初のものはclass_Window(拡散シートを作成します)とdefボタン(基本的に私が作成するすべてのボタンを保持する)です。私はtkintertable.Tables.TableCanvas関数を使ってテーブルを保存する過程で、pickleファイルを作成しています。私の人生では、define関数のボタンをテーブルクラスにリンクする方法を理解できません。クラス間のtKinterボタンのリンク

私が得るエラーは、無効な構文または属性がありません。

これは全体来て取得する方法上の任意の支援は素晴らしい

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")) 

これは私が取得エラーです次のようになります。

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

ます:

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

実際のエラーを表示してください。エラーとトレースバックには、問題の場所と問題点を説明する特定の情報があります。 –

+1

コメントに入れないでください。あなたの質問を編集することができます。 –

答えて

0

は、このコードを検討すぐにself.table.save("AssessmentTable")をボタンが作成される時刻。これはself.tableが作成される前に呼び出されています。したがって、属性エラーが発生します。

ボタンをクリックするとself.table.saveに電話をかける必要があります。最も簡単な解決策は、テーブルを保存する関数を作成し、コールバックでそのボタンを参照することです。

def save_table(self): 
    self.table.save("AssessmentTable") 

def buttons(self): 
    Button(..., command=self.save_table) 
+0

ありがとうございます。それは完璧に働いた。クラスにはまだ新しいが、これはどのように通過するかを見るための素晴らしい解決策でした。 – Jake