2016-05-01 66 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) 
相关问题