2

在 Tcl/Tk 8.6 中有一个称为 notebook 的 Ttk 功能,我想在我的程序中实现它。但是,我需要该软件包才能使用此功能。我必须使用 8.4,因为我们使用的其中一个 dll 仅与 8.4 版兼容(我感到沮丧的根源)。

我已经下载了 Tcl 8.6 的源代码并找到了 Notebook.tcl。我已经模仿了 BWidgets 文件夹中的文件夹结构,希望我可以将它导入到程序中,但无济于事。关于如何从 Tcl 8.6 获取包以与 8.4 一起正常工作的任何想法?

4

1 回答 1

4

Ttk 小部件集最早出现在 Tk 8.5;从那时起便可以使用笔记本小部件。然而,Ttk 小部件是基于(非常接近!)一个名为Tile的小部件扩展包,作者已经说过

只要 Tcl/Tk 8.4 仍然是一个可行的平台,Tile 将作为与 8.4 兼容的扩展来维护。每个人都需要一段时间才能升级到 8.5。

我不能 100% 确定你是否可以使用 Tile 来做你正在做的事情,但它必须值得一试!


如果这不起作用,您可能会考虑将程序拆分为两个通过管道进行通信的进程。效果很好;Tcl 对管道的处理非常好。这将允许您将 8.5 或 8.6 用于 GUI,将 8.4 用于旧扩展。

如果该 8.4 代码用于创建小部件并且您在 Unix/X11 上,您甚至可以将 8.4 小部件嵌入到包装 8.5/8.6 GUI 的框架中。关键是你设置的frame和你设置-container true的toplevel-use $id可以在不同的进程中;只需制作容器框架,使用 获取其 ID winfo id,然后在创建它时将其发送到其他进程,以便它可以创建一个使用该框架作为其容器的顶层。(使用命令行参数效果特别好,因为它可以让您控制.顶层的选项。)

set f [frame .foo -container true]
set id [winfo id $f]
set pipeline [open |[list wish8.4 your84script.tcl -use $id] "r+"]

(这就是 Tcl/Tk 浏览器插件的工作方式。)

于 2013-08-08T08:19:57.453 回答