【问题标题】:Can't Properly "connect" a class with its objects不能正确地“连接”一个类与其对象
【发布时间】:2016-05-01 03:31:22
【问题描述】:

我想为我正在尝试制作的“游戏”创建一个作为“自定义小部件”模板的类。问题是,只有当我调用类时,我才能让它工作,我指定了将所有东西放在一起的 Frame 对象。整个下午都在找,找不到具体的答案……

下面的代码有效,但我必须使用StatusButton().frame.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() 时出现我的“自定义小部件”?

对不起,如果这是一个菜鸟错误,这是我编程的第一周

【问题讨论】:

    标签: python class python-3.x tkinter


    【解决方案1】:

    问题是你没有利用你的子类。你初始化 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多