在动态向OptionMenu添加新选项时,向Tkinter StringVar回调传递过多参数

时间:2015-12-15 00:23:19

标签: python tkinter

我正在尝试向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代码的情况下进行检查。我确定问题是由于我动态添加了一个选项,因为在我这样做之前没有这样的错误。

1 个答案:

答案 0 :(得分:1)

trace发送给update_current_table四个参数(self),但您的函数只需要一个 - self。您可能需要update_current_table(self, *args)