__init__() 缺少 1 个必需的位置参数:'widgetName'

__init__() missing 1 required positional argument: 'widgetName'

我想开发一个继承自 tkinter 菜单 class 的 class。到目前为止,这是我的代码,它实现了 class MyMenu,随后创建了一个测试实例 mDummy 并添加了一个命令。

# import tkinter
import tkinter as tk
# define menu class
class MyMenu(tk.Menu):
    def __init__(self, arg_master=None, **options):
    # call superclass constructors
    super(tk.Menu,self).__init__(arg_master,**options)

#define test command for menu
def testcommand():
    print("This is a test")

#start of the code    
main=tk.Tk()
mDummy=MyMenu(main)
main.config(menu=mDummy)
mDummy.add_command(label="testlabel",command=testcommand)

main.mainloop()

代码的执行导致类型错误:

TypeError: __init__() missing 1 required positional argument: 'widgetName'.

这是完整的回溯:

Traceback (most recent call last):   File "C:\Program Files
(x86)\Python34\MyProjects\tests\test_myUCVMenu.py", line 15, in <module>
    mDummy=MyMenu(main)   
File "C:\Program Files (x86)\Python34\MyProjects\tests\test_myUCVMenu.py", line 7, in __init__
    super(tk.Menu,self).__init__(arg_master,**options) 
TypeError: __init__() missing 1 required positional argument: 'widgetName'

从消息中,我认为 tkinter 菜单 class 的 __init__ 运算符要我给一个变量 'widgetName' 作为位置参数,但我找不到了解文档中 "widgetName" 的含义。可能错误出在给定行以外的其他地方,但代码在调用 __init__ 运算符时崩溃?

事实上,以下工作:

import tkinter as tk

class MyMenu(tk.Menu):
    def __init__(self, arg_master=None, **options):
        super().__init__(arg_master,**options)

def testcommand():
    print("This is a test")

main=tk.Tk()
mDummy=MyMenu(main)
main.config(menu=mDummy)
mDummy.add_command(label="testlabel",command=testcommand)

main.mainloop()

我做了两个更正:我重新缩进了对 super 的调用,因此它在 __init__ 方法内部;我更改了 super 方法本身: Python 3 引入了 super().__init__() 语法。

对于 Python 3.4,我需要进行两项更改才能使代码正常工作。

super() 需要您的小部件名称 - 这是 MyMenu,而不是 tk.Menu

 super(MyMenu, self).__init__(arg_master, **options)