2

这是我的规格: OS X Tiger Perl 5.8 Using Tkx bundled with ActiveTcl v8.5

我已经使用 PAR/pp 成功创建了具有上述配置的独立应用程序,但这并不是一个完全令人满意的解决方案:

  • 仍然需要安装 Tcl/Tk
  • 在带有默认菜单的 Tcl/Tk 窗口中打开
  • 每次运行应用程序时都会打开终端

我可以采取另一种方法来绕过这些问题吗?

4

2 回答 2

5

如果您使用 ActivePerl,它应该与 Tcl 和 Tk 的共享对象捆绑在一起。这些文件是 Tcl.so 和 tkkit.so(Windows 上的 Tcl.dll 和 tkkit.dll)。您需要配置 pp 以使用该-l选项将它们与您的自包含可执行文件捆绑在一起。例如(在 Windows 上):

-l C:/Perl/lib/auto/Tcl/tkkit.dll
-l C:/Perl/lib/auto/Tcl/Tcl.dll

不幸的是,PAR 没有在正确的位置解压共享对象,以便 Tkx 应用程序找到它们。您可以通过$ENV{PERL_TCL_DL_PATH}在加载 Tkx 之前进行设置来解决此问题。要使应用程序在有或没有 PAR 的情况下都可用,请使用 BEGIN 块来检测它何时在 PAR 下运行:

use strict;
use warnings;
use File::Spec::Functions;

BEGIN {
    if (exists $ENV{PAR_PROGNAME}) {
        use Config ();
        $ENV{PERL_TCL_DL_PATH} = catfile(
            $ENV{PAR_TEMP},
            'tkkit.' . $Config::Config{dlext},
        );
    }
}

use Tkx;
# remainder of script...

pp有一个-g(或--gui)选项来构建没有控制台窗口的应用程序,但它只适用于 Windows。我不知道是否有办法在 OS X 上隐藏控制台。

至于在带有默认菜单的 Tcl/Tk 窗口中打开的应用程序,我不知道。我怀疑这是因为您使用的是 ActiveTcl 安装而不是与 ActivePerl 捆绑的共享对象。

于 2009-08-16T21:18:06.660 回答
1

ActiveState Perl 开发工具包具有将 Tkx 脚本绑定为适当的 OS X 应用程序的额外知识。您可以在http://www.activestate.com/perl-dev-kit尝试一下。

弹出的控制台与 Tk 中的启发式方法有关,该方法试图确定您是否以交互方式运行(并且显然在您的情况下弄错了)。您始终可以通过以下方式抑制其显示:

Tkx::catch("console hide");

在 OS XI 上还推荐:

Tkx::set("::tk::mac::useThemedToplevel" => 1);
于 2010-12-08T05:07:14.307 回答