我有一个应该根据下拉菜单中的哪个选项构建一个窗口的函数:
def buildview():
value = StringVar()
options = ["one", "two", "three"]
menu = OptionMenu(*(root, value) + tuple(options))
### Some window building accoring to the value selected... ###
value.trace_variable("w", buildview)
引发的异常如下所示(EDIT:Entire Traceback):
Traceback (most recent call last):
File "D:\Dropbox\PRO\infograbber\Infograbber 0.1.py", line 102, in <module>
mainloop()
File "C:\Python35\Python3564\lib\tkinter\__init__.py", line 405, in mainloop
_default_root.tk.mainloop(n)
File "C:\Python35\Python3564\lib\tkinter\__init__.py", line 1553, in __call__
self.widget._report_exception()
AttributeError: 'StringVar' object has no attribute '_report_exception'
究竟是什么导致了这个?我可以没有这样的方法回调吗?我甚至不知道从哪里开始解决这个问题,所以我很感激你的帮助。
我正在使用Python 3.5 64位,Sublime Text 2,Windows 10。
编辑: 添加了测试回调函数:
def test(*args):
print("test")
并将上面的描述更改为
value.trace_variable("w", test)
现在异常改为:
Traceback (most recent call last):
File "C:\Python35\Python3564\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "D:\Dropbox\PRO\infograbber\Infograbber 0.1.py", line 56, in buildview
root.trace_variable("w", self.printcurrentarticle)
File "C:\Python35\Python3564\lib\tkinter\__init__.py", line 1948, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'trace_variable'
答案 0 :(得分:1)
我不完全确定这是否是唯一的问题,但它绝对是 问题。当跟踪触发时,它会通过three arguments。您定义的函数不带参数。您需要传入对至少包含三个参数的函数的引用。
您还遇到的问题是,每次跟踪触发时,您都要创建另一个变量和另一个跟踪。从表面看来,这似乎是一个坏主意,除非你真的想在每次选项菜单改变时创建一个新的选项菜单。