我想创建一个类,它将成为我试图制作的“游戏”的“自定义小部件”的模板。问题是我只能在它调用类时才能使它工作,我指定了将所有东西放在一起的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()
时,出现“自定义小部件”?
很抱歉,如果这是noob错误,那是我编程的第一周
答案 0 :(得分: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)