2014-06-17 49 views
2

我正在使用TclApp將我的程序及其所有文件封裝在一個獨立的可執行文件中,並且它對99%的文件都能正常工作。然而,它似乎並沒有包裝或識別我的.ico文件...使用TclApp封裝程序,在Tcl/Tk中使用位圖問題

我正在寫一個程序在Tcl/Tk中,我試圖在左上角這樣設置主窗口圖標:

wm iconbitmap .main myIcon.ico 
wm iconbitmap .main -default myIcon.ico 

打包程序後,如果.exe文件與.ico文件位於相同的目錄中,則該文件只會與圖標一起損壞 - 而不是其他任何地方。這與TclApp首先包裝Tcl程序的全部目的是背道而馳的。 應該應該發生的是TclApp在其虛擬文件系統中用.tcl文件包裝.ico文件,以便無論我的.exe文件位於何處,它都應該能夠找到該圖標。

我試圖用更明確地指定的路徑:

set icon_home [file dirname [info script]];  
wm iconbitmap .main [file join $icon_home myIcon.ico] 
wm iconbitmap .main -default [file join $icon_home myIcon.ico] 

沒有運氣...

我得到那麼的錯誤是:

Error Code: TK LOOKUP BITMAP myIcon.ico 
bitmap "myIcon.ico" not defined 
    while executing... 

所以這兩個問題我有這個:我在互聯網上閱讀過很多博客和文章,Tcl/Tk可能會有一些位圖錯誤,或者有些東西往往出錯 - 沒有人詳細說明。另一個問題是,TclApp應該用tcl腳本包裝圖標,以便從任何地方運行我的程序應該能夠像在.ico文件中一樣運行,但它不是...

那麼我哪裏錯了? Tcl代碼有什麼問題,Tcl/Tk中是否有位圖錯誤,或者TclApp無法正常工作?

+0

我隱約記住這是需要一個_OS-recognized_文件名,但它不是我已經試驗了很長一段時間... –

+0

是的這很奇怪 - 但我現在確認它必須是一個包裝問題; 我決定嘗試寫出.ico文件的完整路徑,現在我可以在計算機上的任何位置運行可執行文件,因爲我應該可以 - 但仍然無法解析。該程序無法找到另一臺計算機上的圖標... – Grandclosing

+0

更新:TclApp有一個「自定義圖標」部分,您可以在其中指定一個自定義的.ico文件 - 我使用的圖標文件內嵌入多種尺寸,全部的32bpp;但是,TclApp忽略了這些尺寸,就好像它們不存在一樣,也不會將圖標包裝到程序中。它一定是個bug ... – Grandclosing

回答

0

我一直在這個問題上的工作,我學到有價值的東西,基本上回答了自己的問題:

使用TclApp,我在上面的Tcl發佈的代碼甚至是不必要的。包裝程序將把你的圖標放在任何需要的地方,而不需要手動編碼。

但是,TclApp使用前綴文件來生成可執行文件。這個文件是需要指定是否要製作一個starpack(一個獨立的tcl/tk可執行程序)。在這個前綴文件中嵌入了一些用於.ico文件的不同的默認圖標大小和顏色深度(我正在使用base-tk8.6-thread.win32-ix86.exe)。除非所有這些圖標格式都由您的自定義圖標正確替換,否則在程序完成打包時它們將可見。

的問題是,我還沒有確保我的圖標文件被覆蓋了所有必要的大小和顏色深度(256×256 32bpp的,128×128 32bpp的,64×64 32bpp的,等等)的

編輯:

所以我接觸的ActiveState,我發現了這一點: 有一個在TclApp關於尺寸256×256後退時,Windows Vista中走了出來,微軟改變了它是如何處理的256×圖標大小的圖標中的錯誤256或更大;爲了壓縮,較大的圖標開始將png文件數據嵌入到它們中。這很好,但問題在於TclApp預計自定義圖標的文件大小非常具體,如果沒有收到,它會完全忽略大小;這個PNG信息確實會改變圖標的​​文件大小,所以基本上它在TclApp中不起作用。他們說這是一個可能會保持不確定的錯誤。