Я хочу разработать класс, который наследуется от класса меню tkinter. Вот мой код до сих пор реализует класс MyMenu
, затем создает тестовый экземпляр mDummy
и добавляет команду.__init __() missing 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 menu требует, чтобы я дал переменную 'widgetName'
в качестве позиционного аргумента, но я не мог узнать значение "widgetName"
в документе. Может быть, ошибка находится где-то в другом месте, чем в данной строке, но код падает при вызове оператора __init__
?
Вы должны всегда использовать * * текущий класс в 'супер()' вызов; 'MyMenu', а не' tk.Menu'. –
@ DanielRoseman Лучшим способом является вызов 'super() .__ init __()' без аргументов, хотя из Python 3, который, по-видимому, имеет место, поскольку OP использует 'print' в качестве функции. –
Вот исходный код tkinter: http://mgltools.scripps.edu/api/DejaVu/Tkinter-pysrc.html Возможно, это вам поможет. Меню наследует виджет, который наследует BaseWidget, которому требуется имя виджета как параметр init. –