请帮助修复脚本。
import tkinter
import sys
class mainMenu(tkinter.Frame):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
self.pack(side = 'top', fill = 'x')
self.parent = parent
self.make_menu_bar()
def make_menu_bar(self):
menubar = tkinter.Menu(self.parent)
self.parent.config(menu = menubar)
file = tkinter.Menu(menubar, tearoff = False)
file.add_command(label = 'Quit', command = sys.exit())
menubar.add_cascade(label = 'File', menu = file)
class MainFrame(tkinter.Frame, mainMenu):
def __init__(self, parent):
tkinter.Frame.__init__(self, parent)
self.pack(side = 'top', fill = 'x', expand = 'yes')
self.parent = parent
self.make_elements()
def make_elements():
self.menu = TextPadMenu.__init__(self, parent)
root = MainFrame(tkinter.Tk())
root.mainloop()
问题是类MainFrame无法继承自:tkinter.Frame,mainMenu。错误信息是:
Traceback(最近一次调用最后一次):文件 “C:\ Python33 \ projects \ TEXTPADS \ textPad_OOP \ q.py”,第22行,in class MainFrame(tkinter.Frame,mainMenu):TypeError:无法为基础创建一致的方法解析顺序(MRO)Frame,mainMenu
答案 0 :(得分:1)
这不是一个tkinter问题,这就是类在python中的工作方式。对你的问题的简短回答是,你无法做你想做的事。有可能破解解决方法,但为什么呢?您不应该从类和该类的基类继承。
为了说明它不是Tkinter程序,这是一个给出相同错误的最小解决方案:
class Base(object): pass
class Example1(Base): pass
class Example2(Base, Example1): pass
运行时,会产生以下输出:
bash-3.2$ python example.py
Traceback (most recent call last):
File "example.py", line 3, in <module>
class Example2(Base, Example1): pass
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases Example1, Base
当您走出正常使用范围时,了解方法解析顺序可能很困难。如果你想更深入地回答“我为什么不能这样做?”的问题,请从这里开始: