我目前正在学习继承和覆盖方法。我能够添加某种方法,但是现在我正努力从超类的方法中删除某些东西。更具体地说,我的超类是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
我该如何覆盖呢?
答案 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)了。