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

时间:2016-12-20 12:58:30

标签: python tkinter menu subclass

我想开发一个继承自tkinter菜单类的类。这是我的代码到目前为止实现了类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菜单类的__init__运算符要求我将变量'widgetName'作为位置参数,但我找不到{{的含义1}}在文件中。可能是错误是在给定行之外的其他地方,但代码在"widgetName"运算符的调用时崩溃了?

2 个答案:

答案 0 :(得分:0)

事实上,以下工作:

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,我需要进行两项更改才能使代码生效。

答案 1 :(得分:0)

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

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