我想开发一个继承自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"
运算符的调用时崩溃了?
答案 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)