2016-08-02 49 views
0

我是python 3.5的新手,想知道是否有人可以指向正確的方向。我有一個簡單的圖形用戶界面,並希望將一些數據加載到程序中,但似乎無法讓班級工作,所以我顯然忘記了一些東西。你們能幫忙嗎?以下是我的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」的消息,但它不會輸出打印(「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...")