2016-05-01 8 views
0

私が作ろうとしている「ゲーム」用の「カスタムウィジェット」のテンプレートとなるクラスを作りたかったのです。問題は、私がクラスを呼び出すときにすべてを保持するFrameオブジェクトを指定すれば、それを動作させることしかできないということです。私は私が持っているStatusButton().frame.grid()クラスをオブジェクトに適切に「接続」できない

from tkinter import * 
from tkinter.ttk import Progressbar 

class StatusButton(Frame): 
    def __init__(self, master): 
     super(StatusButton, self).__init__() 
     self.frame = Frame(master, padx = 10, pady = 10, bd= 5, relief = RAISED) 
     self.label = Label(self.frame, text = "Hunger Bar") 
     self.pgbar = Progressbar(self.frame) 
     self.button = Button(self.frame, text = "Eat") 
     self.label.pack() 
     self.pgbar.pack() 
     self.button.pack(pady = 5, ipadx = 15) 
     return 

root = Tk() 
buttonslist = [StatusButton(root) for x in range(16)] 

for r in range(4): 
    for c in range(4): 
     StatusButton(root).frame.grid(row = r, column = c) 
root.mainloop() 

私は使用するだけStatusButton().grid()を書くために必要とするのではなく、私の全体の午後を検索してきたと...

次のコードの動作を、具体的な答えを見つけることができませんでしたが、以前のコードが実行されたときに、代わりにStatusButton().grid()があるため、フレームオブジェクトをクラスに適切に「接続」していないと推測します.TKinterウィンドウは通常はポップアップしますが、私が空のFrameオブジェクトを「グリッド化」していたかのように。 StatusButton().grid()を実行すると、私の "カスタムウィジェットのこと"が表示されるように、これを修正する方法はありますか?これはnoobのエラーであれば

申し訳ありませんが、それはプログラミング

答えて

0

で私の最初の週の問題は、あなたがあなたのサブクラスを利用していないことです。引数なしでFrameを初期化し、引数を指定して新しいものを作成します。 selfではなく、self.frameを親としてウィジェットを作成します。これに変更してください:

class StatusButton(Frame): 
    def __init__(self, master): 
     super(StatusButton, self).__init__(master, padx=10, pady=10, bd=5, relief=RAISED) 
     self.label = Label(self, text="Hunger Bar") 
     self.pgbar = Progressbar(self) 
     self.button = Button(self, text="Eat") 
     self.label.pack() 
     self.pgbar.pack() 
     self.button.pack(pady=5, ipadx=15) 
関連する問題