我正在尝试向Tkinter OptionMenu
添加新选项。我也在关注菜单改变的变量。
self.chosen_table = tk.StringVar(frame)
self.chosen_table.set("Please select a table...")
self.table_menu = tk.OptionMenu(frame, self.chosen_table,
"Please select a table...",
*self.tables.keys())
self.chosen_table.trace("w", self.update_current_table)
self.update_current_table
只是一项任务,没什么特别的。我正在尝试动态地向菜单添加选项:
new_comm = tk._setit(self.chosen_table, table_name)
self.table_menu['menu'].add_command(label=table_name, command=new_comm)
这会将新选项添加到菜单中,但是当我尝试选择新选项时,我收到以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1549, in __call__
return self.func(*args)
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 3285, in __call__
self.__var.set(self.__value)
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 260, in set
return self._tk.globalsetvar(self._name, value)
_tkinter.TclError: can't set "PY_VAR0":
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1549, in __call__
return self.func(*args)
TypeError: update_current_table() takes 1 positional argument but 4 were given
我不知道我给update_current_table
提供了哪些参数,只需要self
作为参数,我不知道如何在不改变大量Tkinter代码的情况下进行检查。我确定问题是由于我动态添加了一个选项,因为在我这样做之前没有这样的错误。
答案 0 :(得分:1)
trace
发送给update_current_table
四个参数(self
),但您的函数只需要一个 - self
。您可能需要update_current_table(self, *args)