使用TclApp封装程序,在Tcl/Tk中发出位图问题



我使用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不能正常工作??

我一直在这个问题上工作,我学到了一些有价值的东西,基本上回答了我自己的问题:

使用TclApp,我上面在Tcl中发布的代码甚至是不必要的。包装程序会把你的图标放在它需要的地方,不需要手工编码。

然而,

TclApp使用前缀文件来生成可执行文件。如果你想创建一个starpack(一个独立的tcl/tk可执行程序),这个文件是必须的。在这个前缀文件中嵌入了。ico文件的许多不同的默认图标大小和颜色深度(我使用base-tk8.6-thread.win32-ix86.exe)。除非所有这些图标格式都被您的自定义图标完全替换,否则当程序完成包装时,它们将是可见的。

问题是我没有确保我的图标文件覆盖了所有必要的尺寸和颜色深度(256x256 32bpp, 128x128 32bpp, 64x64 32bpp等)

编辑:

所以我联系了ActiveState,我发现了这个:TclApp中有一个关于大小为256 × 256的图标的bug。当windows Vista发布时,微软改变了对256 x 256或更大尺寸图标的处理方式;为了便于压缩,较大的图标开始嵌入png文件数据。这很好,但问题是TclApp需要一个非常具体的自定义图标的文件大小,如果没有收到这个,它会完全忽略这个大小;这个png信息实际上改变了图标的文件大小,所以基本上它在TclApp中不起作用。他们说这个bug可能不会修复。

最新更新