__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)
我想开发一个继承自 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)