我正在使用TclApp将我的程序及其所有文件包装在一个独立的可执行文件中 - 并且它可以正常工作99%的文件。但是,它似乎没有包装或识别我的.ico文件......
我正在Tcl / Tk中编写一个程序,我试图在左上方设置主窗口图标,如下所示:
wm iconbitmap .main myIcon.ico
wm iconbitmap .main -default myIcon.ico
包装程序后,如果.exe文件与.ico文件位于同一目录中,则只会使用图标正确破坏 - 而不是其他任何地方。这与首先用TclApp包装Tcl程序的整个目的相反。 应该发生的是TclApp将.ico文件包装在其虚拟文件系统中的.tcl文件中,这样无论我的.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 :(得分:0)
我一直在研究这个问题,我学到了一些有价值的东西,基本上回答了我自己的问题:
使用TclApp,我在Tcl上面发布的代码甚至不是必需的。包装程序将带您的图标并将其放置在需要的位置,无需手动编码。
但是,TclApp使用前缀文件生成可执行文件。这个文件是必要的,用于指定是否要创建一个starpack(独立的tcl / tk可执行程序)。在此前缀文件中嵌入了.ico文件的许多不同的默认图标大小和颜色深度,(我正在使用base-tk8.6-thread.win32-ix86.exe。)除非所有这些图标格式都被您的自定义图标完全替换,否则当程序完成换行时它们将可见。问题是我没有确定我的图标文件覆盖了所有必要的尺寸和颜色深度(256x256 32bpp,128x128 32bpp,64x64 32bpp等)
修改强>
所以我联系了ActiveState,我发现了这个: TclApp中有一个关于大小为256 x 256的图标的错误。当Windows Vista问世时,微软改变了它处理256 x 256或更大的Icon尺寸的方式;为了压缩,较大的图标开始嵌入png文件数据。这很好,但问题是TclApp需要一个非常特定的自定义图标文件大小,如果没有收到这个,它会完全忽略大小;这个png信息确实会改变图标的文件大小,所以基本上它在TclApp中不起作用。他们说这是一个可能保持不固定的错误。