2016-08-02 6 views
0

私はPython 3.5に新しく、誰かが正しい方向に私を向けることができるのだろうかと思っています。私はシンプルなGUIを持っていて、プログラムにデータをロードしようとしていますが、クラスが動作するように見えないので、私は明らかに何かを忘れています。あなたは助けてくれますか?以下は私のGUIのコードです。Python - クラス関数は実行されません__init__

from tkinter import * 

def load_dat(): 
    import load_data 
def doNothing(info=""): 
    if info != "": 
    print(info) 
    status.config(text=info) 
else: 
    print("Ok I wont...") 
    status.config(text="Ok I wont...") 

root = Tk(className="Test GUI") 

# ***** Main Menu ***** 

menu = Menu(root) 
root.config(menu=menu) 

subMenu = Menu(menu) 
menu.add_cascade(label="Load/Save", menu=subMenu) 

loadSubmenu = Menu(menu) 
loadSubmenu.add_command(label="Load Data") 
subMenu.add_cascade(label='Load', command=load_dat) 
subMenu.add_command(label="Save", command=doNothing) 

# ***** Main Area ***** 

main_window = Frame(root, width=200, height=100) 
main_window.pack() 

# ***** Status Bar ***** 

status = Label(root, text="Preparing to do nothing", bd=1, relief=SUNKEN, anchor=W) 
status.pack(side=BOTTOM, fill=X) 

root.mainloop() 

私のクラス(呼び出されLOAD_DATA)のコードは次のとおりです。私は、「データの読み込み」をクリックすると

class load_data: 
print("0") 
def __init__(self): 
    print("1") 

ボタン私はプリント「0」のメッセージを出力するプログラムを取得するが、それができprint( "1")メッセージを出力しません。私は何を忘れていますか?あなたが私に提供できるお手伝いをありがとう。

+1

'load_data'のインスタンスを初期化する関数が実行されません当然のように、あなたは、' load_data'のインスタンスを作成することはありません。 – user2357112

+0

クラス定義のコードをインデントする必要があります。 –

+0

ありがとうuser2357112、もう少し詳しく教えてください。私は何をする必要があるのか​​理解していません。 –

答えて

1

user2357112と同じように、load_dataクラスのインスタンスは決して作成しません。クラスの__init__()関数は、インスタンス化されるときに呼び出されます。あなたは、このようにコードを変更する必要があります。

# fixed indentation 
class load_data: 
    print("0") 
    def __init__(self): 
     print("1") 

と:

from tkinter import * 
import load_data # import always at the start of a script 

def load_dat(): 
    data = load_data() # create an instance "data" of class "load_data" 
def doNothing(info=""): 
    if info != "": 
    print(info) 
    status.config(text=info) 
else: 
    print("Ok I wont...") 
    status.config(text="Ok I wont...") 
関連する問題