python tkinter包tk.call eval

时间:2017-11-15 19:30:25

标签: python tkinter tcl

我使用python tkinter在python中运行tcl 有两种方法可以运行tcl命令:

import tkinter 
root = tkinter.Tk()
root.eval("winfo exists .l0")
root.tk.call("winfo exists .l0")

它们具有相同的含义

但是有什么不同? 如果我还没有定义小部件名称.l0 我可以直接使用

child = ".l0"
child.winfo_exists()

? 因为python告诉我" str没有属性winfo_exists"

1 个答案:

答案 0 :(得分:0)

不同之处在于call将每个参数作为单独的单词传递给tcl,其中eval将通过首先解析字符串然后执行它来评估字符串。

换句话说,这个:

root.eval("winfo exists .l0")

...在功能上与此相同:

root.tk.call("winfo", "exists", ".l0")

对于错误消息'str' object has no attribute 'winfo_exists',它就是这个意思。 "l0"是嵌入式tcl解释器中对象的名称,但在python "l0"中只是一个字符串,而python字符串没有属性winfo_exists