Python 3.x Tkinter跟踪传递字符串而不是帧
我对跟踪方法有一些问题。我正试图建立一个形式,可以改变取决于第一个选项 MCVE: 正如您所见,我需要从表单的前一部分(静态表单)将一些变量传递到此函数中,然后当“ctpyeE”更改为其中一个选项时,我需要重新运行相同的函数,但这次知道ctpyeE设置为什么。然后我可以用它来调整表单的其余部分 我得到的错误来自w.winfo_children(),w是我用来保存表单的框架,但是一旦ctypeE更改并且跟踪运行,它就会将自身更改为空字符串Python 3.x Tkinter跟踪传递字符串而不是帧,python-3.x,tkinter,Python 3.x,Tkinter,我对跟踪方法有一些问题。我正试图建立一个形式,可以改变取决于第一个选项 MCVE: 正如您所见,我需要从表单的前一部分(静态表单)将一些变量传递到此函数中,然后当“ctpyeE”更改为其中一个选项时,我需要重新运行相同的函数,但这次知道ctpyeE设置为什么。然后我可以用它来调整表单的其余部分 我得到的错误来自w.winfo_children(),w是我用来保存表单的框架,但是一旦ctypeE更改并且跟踪运行,它就会将自身更改为空字符串 Exception in Tkinter callback
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:\Users\Scott\Desktop\patient\caseload.py", line 892, in <lambda>
typeE.trace("w", lambda e=Event(), w=w, f=fn, o=on, s=sn, d=dob, g=ge, t=typeE.get(): self.new_client_window_2(event=e, w=w, fn=f, on=o, sn=s, dob=d, ge=g, ctype=t))
File "C:\Users\Scott\Desktop\patient\caseload.py", line 877, in new_client_window_2
children = w.winfo_children()
AttributeError: 'str' object has no attribute 'winfo_children'
Tkinter回调中出现异常
回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\Python37-32\lib\tkinter\\ uuuuu init\uuuuu.py”,第1705行,在调用中__
返回self.func(*args)
文件“C:\Users\Scott\Desktop\patient\caseload.py”,第892行,在
typeE.trace(“w”,lambda e=Event(),w=w,f=fn,o=on,s=sn,d=dob,g=ge,t=typeE.get():self.new_client_window_2(Event=e,w=w,fn=f,on=o,sn=s,dob=d,ge=g,ctype=t))
文件“C:\Users\Scott\Desktop\patient\caseload.py”,第877行,在新客户端窗口2中
children=w.winfo_children()
AttributeError:'str'对象没有属性'winfo_children'
我假设跟踪函数正在函数中设置自己的变量,但是我找不到关于这些变量是什么的任何文档,所以我可以解释它们
注:
self.tku是我自己的类,cFrame和cButton只是添加了pack()的Frame/Button,使其成为一行,应该很容易调整
fn、on、sn、dob和ge都是条目小部件对象。w是保存表单的框架。简而言之,您使用的跟踪不正确 创建变量跟踪时,将使用三个位置参数调用与跟踪关联的函数(请参阅)。因此,当调用lambda时,
e
将被设置为第一个位置参数,w
将被设置为第二个位置参数,f
将被设置为第三个位置参数
一个简单的解决方案是确保lambda在命名参数之前接受这些参数:
typeE.trace("w", lambda name1, name2, operation, e=Event(), w=w, ...etc)
您是否进行过任何调试以验证
w
是否与您认为的一致?你能不能创建一个新的模型,这样我们就可以重现你的问题?@BryanOakley我知道w是什么,问题是它是什么,是错的。它应该是一个帧,但跟踪后它会变成一个字符串。这只发生在跟踪事件之后,尽管它根本没有被更改。我已经按照你的建议添加了MCVE
typeE.trace("w", lambda name1, name2, operation, e=Event(), w=w, ...etc)