【问题标题】:How to make Tkinter use any given Tcl interpreter, other that system wide Tcl interpreter如何让 Tkinter 使用任何给定的 Tcl 解释器,除了系统范围的 Tcl 解释器
【发布时间】:2013-07-03 20:07:16
【问题描述】:

我有一个旧的基于 Tcl 的应用程序,我打算为它编写一个 python 包装器。我的 Tcl 遗留应用程序带有它自己的 Tcl 解释器。它不使用系统提供的解释器。

我打算使用 Tkinter.Tcl() 与 Tcl 解释器挂钩并使用 eval 执行 Tcl 指令。

但是 Python 的 Tkinter 正在调用系统上安装的默认 Tcl 解释器。如何指示 Tkinter 使用我的遗留应用程序附带的 Tcl 解释器???

PS:我在系统上没有 root 权限,但我可以在本地工作区重建 Python 或 Tcl 或两者。

【问题讨论】:

  • 您使用的是哪个操作系统平台?

标签: python tkinter tcl tk


【解决方案1】:

与 Tk 库的所有链接都是通过 Python 的 _tkinter.so C 扩展模块进行的。您可以尝试仅构建它,并与您的库链接,但只有在_tkinter.so 构建时使用与您所有用户系统上使用的系统 Python 相同的选项,才能保证工作。最安全和最可靠的方法是构建您自己的与您的 Tcl/Tk 链接的 Python,并将其作为应用程序的一部分发布。让 Python 在非标准位置与 Tcl/Tk 链接可能有点棘手;在 Python 的顶级 setup.py 中修改 detect_tkinter 方法以查找 includelib 文件的所需位置可能是最简单的。 (setup.py 控制着 Python 标准库模块的构建,包括 _tkinter.so。)

【讨论】:

  • 我希望应该有一些更简单或直接的方法。
  • Python 使用一些相当低级的 C API 嵌入了 Tcl/Tk。如果构建 Python 时使用的 Tcl 和 Tk 版本与后来执行的版本不匹配,则可能会发生坏事。你只是不能确定它会起作用。
  • 此外,将内置 Python 包含在应用程序中一点也不稀奇。如果您要发布自己的 Tcl,为什么不也发布自己的 Python?
  • 我可以随应用程序一起提供 python,但我将如何确保 python 将指向应用程序附带的 Tcl。
  • 可以用 Python 静态链接 Tcl 和 Tk。否则,您应该能够定义您的运输目录结构并将-rpath 选项添加到_tkinter 链接步骤或确保在运行时设置LD_LIBRARY_PATH 以包含您的Tcl 和Tk 库的位置。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多