使用trace_variable()引发异常

2024-04-16 12:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,根据下拉菜单中选择的选项来构建窗口:

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)

引发的异常如下所示(编辑:整个回溯):

^{pr2}$

到底是什么原因造成的?我不能让一个方法像这样回调它自己吗?我甚至不知道从哪里开始解决这个问题,所以我非常感谢你的帮助。在

我使用的是python3.5 64位,sublimetext2,windows10。在

编辑: 添加了测试回调函数:

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'

Tags: 函数inpytestselfvaluetkinterdef
1条回答
网友
1楼 · 发布于 2024-04-16 12:24:28

我不太确定这是否是唯一的问题,但绝对是个问题。当跟踪激发时,它将传入three arguments。您定义的函数不带参数。您需要传入一个对至少包含三个参数的函数的引用。在

您还存在这样一个问题:每次触发跟踪时,都会创建另一个变量和另一个跟踪。表面上看,这似乎是个坏主意,除非你真的想在每次选项菜单更改时都创建一个新的选项菜单。在

相关问题 更多 >