我想開發一個繼承自tkinter菜單類的類。這是我迄今爲止的代碼實現類MyMenu
,之後創建一個測試實例mDummy
並添加一個命令。__init __()缺少1個必需的位置參數:'widgetName'
# 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'
從消息,我認爲__init__
運營商的tkinter菜單類希望我給變量'widgetName'
作爲位置參數,但我無法找到文檔中的"widgetName"
的含義。可能是錯誤在給定行中的其他地方,但代碼在調用__init__
運算符時崩潰了?
你應該總是使用*電流*類的'超()'調用; 'MyMenu',而不是'tk.Menu'。 –
@DanielRoseman最好的方法是從Python 3中沒有參數地調用'super().__ init __()',這看起來就是這樣,因爲OP使用'print'作爲函數。 –
這裏是tkinter的源代碼:http://mgltools.scripps.edu/api/DejaVu/Tkinter-pysrc.html也許它可以幫助你。菜單繼承Widget,繼承BaseWidget,它需要widgetName作爲初始參數 –