Python 如何使用Tkinter菜单插入\u级联
我想使用insert_cascade()方法在给定索引处插入菜单。据我所知,它采用的参数与add_cascade()方法加上要插入位置的整数索引号相同。但我不能让它工作,我得到下面的错误Python 如何使用Tkinter菜单插入\u级联,python,tkinter,Python,Tkinter,我想使用insert_cascade()方法在给定索引处插入菜单。据我所知,它采用的参数与add_cascade()方法加上要插入位置的整数索引号相同。但我不能让它工作,我得到下面的错误 File "/usr/lib64/python3.7/tkinter/__init__.py", line 2900, in insert_cascade self.insert(index, 'cascade', cnf or kw) TypeError: insert() takes from 1
File "/usr/lib64/python3.7/tkinter/__init__.py", line 2900, in insert_cascade
self.insert(index, 'cascade', cnf or kw)
TypeError: insert() takes from 1 to 2 positional arguments but 4 were given
我已经尝试过对索引进行编码,并使用与add_cascade()方法相同的参数,add_cascade()效果很好
这是电话
parent.insert_cascade(self.index, **self.opts)
self.index
是一个int
。
self.options
是一个dict
class Menu(_MenuBase, tk.Menu):
def __init__(self, parent, key, **data):
_MenuBase.__init__(self, parent, key, **data)
tk.Menu.__init__(self, parent)
if self.inherit:
self.cfg = {**parent.cfg, **self.cfg}
self.config(**self.cfg)
if self.index is not None:
parent.insert_cascade(self.index, **self.opts)
else:
parent.add_cascade(**self.opts)
self.opts['image'] = self.image_name
for key, item in data.items():
if isinstance(item, dict):
if item['type'] in ('Menu', 'MenuItem', 'MenuSeparator', 'MenuCheckbutton', 'MenuRadiobutton'):
self.nodes[key] = globals()[item['type']](self, key, **item)
感谢所有回应的人。我发现了这个问题,并且知道为什么我的代码失败了。我正在处理的项目有点复杂,并且有多个文件中的代码,这显然是我不想在这里发布的原因。我将解释发生了什么,这样其他人可以从我的错误中获益 这是类定义类菜单(_MenuBase,tk.Menu) 正如您所看到的,我的类是另外两个类的子类“\u MenuBase,tk.Menu”。 在_MenuBase中,我有一个方法def insert(self,uri=None,**data)。
正是这种方法导致了命名冲突。我解决了这个问题,一切都很好。显示这个问题的最小工作代码,这样我们就可以运行它。我添加了我的类来显示它的使用方式,就像我上面所说的add_cascade()工作。不要使用
**
来放置字典-因为它从字典中解压值并作为单独的参数放置。它适用于add_cascade(),我认为这不是问题所在。显示完整错误消息-它显示insert()
,而不是insert\u cascade()