我使用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"
答案 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
。