ここに私の仕様があります: OS X Tiger Perl 5.8 Using Tkx bundled with ActiveTcl v8.5
PAR/pp を使用して上記の構成でスタンドアロン アプリを正常に作成しましたが、完全に満足できるソリューションではありません。
- Tcl/Tk をインストールする必要があります
- Tcl/Tk ウィンドウにデフォルトのメニューが表示されます
- アプリケーションを実行するたびにターミナルを開く
これらの問題を回避できる別のルートはありますか?
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 ウィンドウでデフォルト メニューが表示されるアプリケーションについては、わかりません。これは、ActivePerl にバンドルされている共有オブジェクトではなく、ActiveTcl インストールを使用しているためだと思われます。
ActiveState Perl Dev Kit には、Tkx スクリプトを適切な OS X アプリとしてバインドするための特別な知識があります。http://www.activestate.com/perl-dev-kitで試すことができます。
コンソールのポップアップは、対話的に実行しているかどうかを判断しようとするTkのヒューリスティックに関係しています(そして、あなたの場合は明らかに間違っています)。次の方法でいつでも表示を抑制することができます。
Tkx::catch("console hide");
OS XI では、次のこともお勧めします。
Tkx::set("::tk::mac::useThemedToplevel" => 1);