2016-03-22 5 views
0

が定義されていない私は、私はこれを解決する方法を誤りNameError: name 'make_label' is not definedを得、このようなクラス内からメソッドを呼び出すためにPythonのNameError:名前METHOD_NAMEが

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

を試してみました。また、モジュールとして実行するために、可能な限りインポート可能なコードを作成しようとしましたが、これを行う最善の方法は何ですか?

多くのおかげ

+3

コードを貼り付けたときにインデントが間違っていると思うので、コードを修正してください。 'make_label'は関数かクラスメソッドであるはずですか?私は後者を疑う?もしそうなら、 'ClassInstance.make_label()'または 'self.make_label()'(クラスインスタンスの中から)を使う必要があります。実際にLoginFrameクラスインスタンスをどこにでも作ることは決してありません。 – Carpetsmoker

答えて

1

あなたはクラスを参照して、そのようにそのクラスの範囲内でメソッドを参照する必要があるので、クラスのメソッドを参照しようとしている。

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

として、あなたのようなクラスと機能を使って、私にとっては見栄えの良い、インポート機能です。 importこの場合、if __name__ == '__main__':ステートメント内のコードは、起動する初期のPythonスクリプト(hereを参照)ではないため、インポート時には実行されませんが、このスクリプトの関数とクラスは引き続き参照できます。

+1

実際には私がコードに入れたインデントは間違っています。 'main'と' if'文はインデントしてはいけません – daiyue

関連する問題