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 ウィンドウでデフォルト メニューが表示されるアプリケーションについては、わかりません。これは、ActivePerl にバンドルされている共有オブジェクトではなく、ActiveTcl インストールを使用しているためだと思われます。

于 2009-08-16T21:18:06.660 に答える
1

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);
于 2010-12-08T05:07:14.307 に答える