2017-05-02 13 views
0

私はプログラミングが初めてで、これはサイトの最初の投稿です。私は間違ったミスをしていると確信していますが、正しい方向へのプッシュを本当に感謝しています。私は電卓を作ろうとしており、数値のButtonオブジェクトを生成する関数を作りたいと思っています。私はこれを実行しようとすると、私はエラーを取得する:Python3クラスの関数定義の混乱についてNameError

「NameError:名前 『:任意の助けをいただければ幸いです

from tkinter import * 

WINDOW_HEIGHT = 300 
WINDOW_WIDTH = 325 

class Window(Frame): 

    def __init__(self, master = None): 
     Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 

    def num_but_gen(self, disp, xloc=0, yloc=0, wid=0, hei=0): 
     self.Button(text='{}'.format(disp),height=hei, width=wid) 
     self.place(x=xloc, y=yloc) 

    def init_window(self): 
     self.master.title('Calculator') 
     self.pack(fill=BOTH, expand=1) 
     Button1 = num_but_gen('1', xloc=0, yloc=200, wid=40, hei=40) 


root = Tk() 
app = Window(root) 
root.geometry("{}x{}".format(WINDOW_WIDTH,WINDOW_HEIGHT)) 
root.mainloop() 

ここ

がコードであるnum_but_gen』が定義されていません」!また、将来の投稿で私の質問のタイトルをうまく表現する方法を提案した人には、ボーナスポイントがあります。

+1

。 'init_window()'と同じように 'self.num_but_gen(...)'と呼ぶ必要があります。 – jasonharper

答えて

0

jasonharperが正しく、num_but_genの前にselfを追加する必要がありますが、コードに他の問題があります。

num_but_genで:

  • あなたのウィンドウクラスがButton属性を持っていないので、あなたはButton
  • の前でself.を削除する必要があり、それはWindowインスタンスではありませんが、あなたが配置したいボタン
  • text='{}'.format(disp)を使用する必要はありません。text=dispは同じです。 init_window

  • あなたが変数にnum_but_genの結果を格納し、それは無用ですので、この関数は何も返さない(と大文字の名前の変数のが、唯一のクラス名には使用しないでください)
  • テキストを表示するボタンの幅オプションはピクセル単位ではなく文字単位であり、その高さオプションはテキスト行内にあるため、wid=40, hei=40は非常に大きなボタンを作成します。ボタンのサイズをピクセル単位で設定する場合は、代わりにplaceメソッドを使用します。ここで

対応するコードです:それはあなたのクラスのメソッドです

import tkinter as tk 

WINDOW_HEIGHT = 300 
WINDOW_WIDTH = 325 

class Window(tk.Frame): 

    def __init__(self, master = None): 
     tk.Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 

    def num_but_gen(self, disp, xloc=0, yloc=0, wid=0, hei=0): 
     button = tk.Button(self, text=disp) 
     button.place(x=xloc, y=yloc, height=hei, width=wid) 

    def init_window(self): 
     self.master.title('Calculator') 
     self.pack(fill=tk.BOTH, expand=1) 
     self.num_but_gen('1', xloc=0, yloc=200, wid=40, hei=40) 


root = tk.Tk() 
app = Window(root) 
root.geometry("{}x{}".format(WINDOW_WIDTH,WINDOW_HEIGHT)) 
root.mainloop() 
関連する問題