2016-03-22 12 views
0

Ich versuchte dies eine Methode aufrufen aus einer Klasse wie,Python Nameerror: Name method_name definiert nicht

from tkinter import * 

class LoginFrame(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 

     self.parent = parent   
     self.initUI() 

    # initialize the login screen UI 
    def initUI(self): 
     self.parent.title("Login Screen") 


    def make_label(parent, caption=NONE, side=TOP, **options): 
     label = Label(parent, text=caption, **options) 

     if side is not TOP: 
      label.pack(side=side) 
     else: 
      label.pack() 

     return label 


    def main(): 
     top = Tk() 

     # create a background image 
     photo_bg = PhotoImage(file="building.gif")   
     building = make_label(top, image=photo_bg) 

     top.mainloop() 


    if __name__ == '__main__': 
     main() 

Ich habe einen Fehler NameError: name 'make_label' is not defined, wie diese zu lösen. Außerdem habe ich versucht, den Code so importierbar wie möglich zu machen, um als Modul zu laufen, was ist der beste Weg das zu tun?

vielen Dank

+3

Ich denke, etwas schief gelaufen mit der Einrückung, wenn Sie Ihren Code eingefügt haben, bitte [bearbeiten] den Code, um das zu beheben. Soll 'make_label' eine Funktion oder eine Klassenmethode sein? Ich vermute Letzteres? Wenn dies der Fall ist, müssen Sie 'ClassInstance.make_label()' oder 'self.make_label()' (innerhalb der Klasseninstanz) verwenden. Du machst nie irgendwo eine 'LoginFrame'-Klasseninstanz. – Carpetsmoker

Antwort

1

Sie versuchen die Methode einer Klasse zu verweisen, so dass Sie die Klasse verweisen müssen und dann in den Anwendungsbereich dieser Klasse die Methode Referenz wie folgt:

building = LoginFrame.make_label(top, image=photo_bg) 

Wie für die Importfähigkeit, die Verwendung von Klassen und Funktionen wie Sie haben, sieht gut aus für mich. Wenn Sie dies tun, wird der Code innerhalb der if __name__ == '__main__': -Anweisung nicht ausgeführt, wenn es importiert wird, da es nicht das initiale Python-Skript ist, das ausgeführt werden soll (siehe here), aber die Funktionen und Klassen dieses Skripts können immer noch referenziert werden.

+1

es ist eigentlich die Einrückung, die ich in den Code falsch gesetzt habe, 'main' und' if' Anweisung sollte nicht eingerückt werden – daiyue

Verwandte Themen