>我有一堆Python函数.我们称他们为foo,bar和baz.它们接受可变数量的字符串参数,并执行其他复杂的操作(如访问网络).

>我希望“用户”(让我们假设他只熟悉Tcl)使用这些函数在Tcl中编写脚本.

以下是用户可以提出的示例(取自Macports):

post-configure {

if {[variant_isset universal]} {

set conflags ""

foreach arch ${configure.universal_archs} {

if {${arch} == "i386"} {append conflags "x86 "} else {

if {${arch} == "ppc64"} {append conflags "ppc_64 "} else {

append conflags ${arch} " "

}

}

}

set profiles [exec find ${worksrcpath} -name "*.pro"]

foreach profile ${profiles} {

reinplace -E "s|^(CONFIG\[ \\t].*)|\\1 ${conflags}|" ${profile}

# Cures an isolated case

system "cd ${worksrcpath}/designer && \

${qt_dir}/bin/qmake -spec ${qt_dir}/mkspecs/macx-g++ -macx \

-o Makefile python.pro"

}

}

}

这里,variant_issset,reinplace等(除了Tcl builtins)实现为Python函数. if,foreach,set等等是正常的Tcl结构. post-configure是一个Python函数,它接受一个Tcl代码块,以后可以执行(反过来显然最终会调用上面提到的Python“函数”).

这可以用Python做吗?如果是这样,怎么样?

来自Tkinter进口*; root = Tk(); root.tk.eval(‘puts [array get tcl_platform]’)是我所知道的唯一集成,显然非常有限(更不用说它在mac上启动X11服务器的事实).

解决方法:

通过一些实验,我发现你可以做这样的事情来创建一个tcl解释器,注册一个python命令,并从Tcl调用它:

import Tkinter

# create the tcl interpreter

tcl = Tkinter.Tcl()

# define a python function

def pycommand(*args):

print "pycommand args:", ", ".join(args)

# register it as a tcl command:

tcl_command_name = "pycommand"

python_function = pycommand

cmd = tcl.createcommand(tcl_command_name, python_function)

# call it, and print the results:

result = tcl.eval("pycommand one two three")

print "tcl result:", result

当我运行上面的代码时,我得到:

$python2.5 /tmp/example.py

pycommand args: one, two, three

tcl result: None

标签:python,dsl,tcl,integration

来源: https://codeday.me/bug/20190827/1740920.html

python tcl 控件_在Tkinter.Tcl()中使用Python函数相关推荐

  1. dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  2. 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)

    一.背景 在 如何在Android中实现一个全景图控件(一)中,介绍了项目的一些基本情况(有 demo 演示),如果项目对你有帮助,希望文章赏个赞,项目 star 一下. 项目地址:https://g ...

  3. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  4. python开发grasshopper插件_在Rhino/Grasshopper中使用Python

    一些基本的信息可以在官方网站(http://wiki.mcneel.com/developer/python)找到. 让人遗憾的是,目前还没有方便有效的方法可以在Rhino/Grasshopper中使 ...

  5. python 运行r语言_如何在R中运行Python

    python 运行r语言 尽管我很喜欢R,但很显然Python还是一种很棒的语言-既适用于数据科学又适用于通用计算. R用户想要在Python中做一些事情可能有充分的理由. 也许这是一个很棒的库,还没 ...

  6. python tcl 控件_在Python中解析TCL列表

    我需要在双括号上拆分以空格分隔的TCL列表-例如-- OUTPUT = """{{172.25.50.10:01:01-Ethernet 172.25.50.10:01: ...

  7. python大于等于怎么表示_如何在rejectdb中应用python lambda表达式中的大于等于

    我在reinstdb表中有下面的json记录.在[{ "pid": 12, "sk": [ { "sid": 30, "et&qu ...

  8. python 调用rpc服务_在Django项目中对Python函数进行RPC调用的优雅方式

    我正在尝试创建一个django网站来访问MySQL数据库中的数据.其目的是在Dojo(javascript)中创建一个UI.另外,我希望django后端也提供webservices(RPC for p ...

  9. python 苹果手机自动重启_在*nix系统中的python中自动重启守护进程

    Joseph Victo.. 5 如果你在Ubuntu上,我建议你看看暴发户.这样做比inittab但实际上涉及一些学习曲线更好. 编辑(布莱尔):这是我最近为自己的一个程序编写的新手脚本的改编示例. ...

最新文章

  1. sysstat.3.bat
  2. linux ftp登录命令_Linux使用pinky命令查询登录用户信息
  3. linux 更改mysql的数据库目录
  4. 享元模式-Flyweight(Java实现)
  5. 安装Debian-9(Stretch)服务器图文教程
  6. ROS笔记(28) Setup Assistant
  7. IIS7.5(IIS7)配置伪静态urlrewrite
  8. 数据清洗Chap6——数据统计
  9. Wpf 初学---01设计一个优美的注册界面
  10. webgl 地球_使用WebGL和JavaScript构建地球
  11. java中直线距离的计算_java计算两点间的距离方法总结
  12. Odoo 8.0深入浅出开发教程
  13. 解决冲突后,git merge --continue 时 lint不通过
  14. python爬取动态页面图片_python动态网页爬取:爬取pexel上的图片
  15. parameter缩略语_常用参数缩写
  16. CODE[VS]1024 一塔湖图
  17. Vue SSR 从入门到 Case Study
  18. ku115上实现adc12dj3200 配置,jesd204b接口,单通道采集模式
  19. 面向对象(OOP)与面向对象设计(OOD)
  20. Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)

热门文章

  1. MySQL—表的完整性约束(外键约束)(二)
  2. [思考]-32位的应用程序为什么不能跑64位的应用程序
  3. python实现DES算法
  4. 010 自动技能的设计和实现
  5. 160个Crackme016
  6. Xcode7  创建纯代码的项目
  7. 1.6 为什么使用向上转型而不直接创建子类对象?
  8. Java线程的概念:什么是线程?
  9. Python爬取淘宝商品价格销量信息
  10. Spring boot国际化