2009-08-16 29 views
2

這裏是我的規格: OS X Tiger的 的Perl 5.8 使用TKX捆綁ActiveTcl V8.5試圖創建一個使用TKX(Tcl/Tk)一個Perl腳本,一個獨立的應用程序

我已經成功創建使用PAR/PP上述配置一個獨立的應用程序,但它不是一個完全令人滿意的解決方案:

  • 仍然需要的Tcl/Tk要安裝
  • 在一個Tcl/Tk的窗口打開了一個默認的菜單
  • 打開終端每次我運行應用程序

是否有另一條路線可以繞過這些問題?

回答

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 

在TKX應用正確的地方不幸的是PAR不會解包共享對象找到他們。在加載Tkx之前,您可以通過設置$ENV{PERL_TCL_DL_PATH}來解決這個問題。爲了使一個應用程序,可有或沒有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捆綁在一起的共享對象。

+1

我讀到有關-g開關了。在這一點上,我認爲我最好的選擇是尋找其他選擇。謝謝。 – 2009-08-16 23:55:15

1

ActiveState Perl Dev Kit具有將Tkx腳本綁定爲正確的OS X應用程序的額外知識。你可以試試http://www.activestate.com/perl-dev-kit

控制檯彈出與Tk中的啓發式測試有關,試圖確定您是否在交互式運行(並且顯然在您的情況下出現錯誤)。你總是可以抑制其顯示器:

Tkx::catch("console hide"); 

在OS X上我還建議:

Tkx::set("::tk::mac::useThemedToplevel" => 1); 
相關問題