尝试从使用tkx(Tcl/tk)的Perl脚本创建独立应用程序

Vla*_*ala 2 perl par tkx

以下是我的规格:OS X Tiger Perl 5.8使用捆绑了ActiveTcl v8.5的Tkx

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

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

是否有其他途径可以绕过这些问题?

Mic*_*man 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
Run Code Online (Sandbox Code Playgroud)

遗憾的是,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...
Run Code Online (Sandbox Code Playgroud)

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

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