2016-05-01 18 views
0

我想創建一個類,它將成爲我正在嘗試創建的「遊戲」的「自定義小部件」的模板。問題在於,如果我在調用類時只能使其工作,則指定將所有內容保存在一起的Frame對象。我一直在我的整個下午搜索,但沒有找到一個具體的答案...不能正確地「連接」一個類與它的對象

下面的代碼工作,而是僅僅需要寫StatusButton().grid()我必須使用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()代替時,TKinter窗口正常彈出,但沒有任何內容,就像我是「網格化」一個空的Frame對象一樣。我該如何解決這個問題,以便當StatusButton().grid()運行時,我的「自定義小部件的東西」出現?

很抱歉,如果這是一個小白錯誤,這是我的第一個星期在編程

回答

0

的問題是,你是不是把你的子類的優勢。您不帶任何參數初始化Frame,然後用參數創建一個新的。然後,您使用self.frame作爲父項而不是self創建小工具。將其更改爲:

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) 
相關問題