使用tkinter.Tk()类执行代码时遇到麻烦

时间:2019-08-28 13:43:40

标签: python-3.x tkinter tcl

我正在尝试使用tkinter.Tk()类从python执行Tcl。我的问题是,每次尝试运行代码时,都会在问题底部显示错误

仅供参考:我的Tcl代码保存到文件“ calc.tcl”,而我的python文件称为“ go.py”

我的python代码是:

from tkinter import *
root=Tk()
code=open('calc.tcl').read()
root.tk.call('exec'code)
root.mainloop()

我的Tcl代码是:

frame .fr
pack .fr

proc calc {} {
    set text [.fr.ent1 get]
    if {[catch {set result [expr $text]}]} {
        set result "calculation failed"
    }
    .fr.ent2 delete 0 end 
    .fr.ent2 insert 1 $result
} 

entry .fr.ent1
bind .fr.ent1 <Return> {calc}
entry .fr.ent2

grid .fr.ent1 -row 0 -column 0
grid .fr.ent2 -row 1 -column 0

错误是:

Traceback (most recent call last):
  File "go.py", line 4, in <module>
    root.tk.call('exec',code)
_tkinter.TclError: couldn't execute "

frame .fr
pack .fr

proc calc {} {
    set text [.fr.ent1 get]
    if {[catch {set result [expr $text]}]} {
        set result "calculation failed"
    }
    .fr.ent2": file name too long

1 个答案:

答案 0 :(得分:2)

在Tcl中,exec运行一个由具有给定名称的可执行文件定义的子进程(由于该文件中包含空格和换行符,因此确实对于<文件名,这是一条错误消息,因为您没有这样的可执行文件。您可能想改用eval

root.tk.call('eval', code)