删除超类方法的一部分

时间:2019-02-15 12:22:44

标签: python-3.x tkinter dialog

我目前正在学习继承和覆盖方法。我能够添加某种方法,但是现在我正努力从超类的方法中删除某些东西。更具体地说,我的超类是tkinter的simpledialog中的Dialog类。我想在子类中更改buttonbox()方法,以便取消按钮被隐藏或删除。我将显示对话框超类的' init '方法和按钮框方法:

class Dialog(Toplevel):

    def __init__(self, parent, title = None):
        Toplevel.__init__(self, parent)
        self.withdraw() 
        if parent.winfo_viewable():
            self.transient(parent)
        if title:
            self.title(title)
        self.parent = parent
        self.result = None
        body = Frame(self)
        self.initial_focus = self.body(body)
        body.pack(padx=5, pady=5)
        self.buttonbox()
        if not self.initial_focus:
            self.initial_focus = self
        self.protocol("WM_DELETE_WINDOW", self.cancel)
        if self.parent is not None:
            self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
                                  parent.winfo_rooty()+50))
        self.deiconify() # become visible now
        self.initial_focus.focus_set()
        self.wait_visibility()
        self.grab_set()
        self.wait_window(self)

    def buttonbox(self):
        box = Frame(self)
        w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
        w.pack(side=LEFT, padx=5, pady=5)
        w = Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=LEFT, padx=5, pady=5)
        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)
        box.pack()

所以现在在创建我的子类时,我想继承超类,但要重写buttonbox方法,以便我只有一个Button(带有OK的Button)。

MyDialogClass(simpledialog.Dialog):
    def buttonbox(self):
        #code that will override the buttonbox method of superclass       

我该如何覆盖呢?

1 个答案:

答案 0 :(得分:0)

很高兴,我尝试了一下,我想我找到了解决办法,我现在觉得有点愚蠢。

MyDialogClass(simpledialog.Dialog):
    def buttonbox(self):
        box = tkinter.Frame(self)
        w = tkinter.Button(box, text="OK", width=10, command=self.ok, default="active")
        w.pack(side="left", padx=5, pady=5)
        self.bind("<Return>", self.ok)
        box.pack()

一开始我的主要问题是,当像超级类按钮框方法那样使用“ box = Frame(self)”时,出现了NameError。现在,我使用了tkinter.Frame(self)了。