Python使用Tkinter tcl.eval将多个参数传递给tcl proc

时间:2016-06-17 07:01:46

标签: python tkinter tcl

如何使用Tkinter将多个参数传递给tcl proc。我想从python proc validate_op传递3个args到tcl proc tableParser,它有3个args ......

from Tkinter import Tcl
import os

tcl = Tcl()

def validate_op(fetch, header, value):
    tcl.eval('source tcl_proc.tcl') 
    tcl.eval('set op [tableParser $fetch $header $value]') <<<<< not working



proc tableParser { result_col args} {

  ..
..
..

}

2 个答案:

答案 0 :(得分:1)

处理此问题的最简单方法是使用Tkinter模块中的_stringify函数。

def validate_op(fetch, header, value):
    tcl.eval('source tcl_proc.tcl') 
    f = tkinter._stringify(fetch)
    h = tkinter._stringify(header)
    v = tkinter._stringify(value)
    tcl.eval('set op [tableParser %(f)s %(h)s %(v)s]' % locals())

这两个问题虽然没有回答你的问题,但在回答这个问题时非常有用:

答案 1 :(得分:0)

如果你不坚持使用eval,你也可以这样做:

def validate_op(fetch, header, value):
    tcl.eval('source tcl_proc.tcl')
    # create a Tcl string variable op to hold the result
    op = tkinter.StringVar(name='op')
    # call the Tcl code and store the result in the string var
    op.set(tcl.call('tableParser', fetch, header, value))

如果你的tableParser返回一个昂贵的序列化对象的句柄,这可能不是一个好主意,因为它涉及转换为字符串,这在eval情况下是避免的。但是如果你只需要回一个字符串,这很好,你不需要处理Donals回答中提到的_stringify函数。