我差不多完成了从py27&amp ;;移植我的应用程序pyGTK到py33& pyGObject
我也在使用cx_freeze来“冻结”应用程序的可移植性。 我现在面临的问题是围绕主题。
Windows的pygobject安装程序将GTK3运行时放入站点包位置&将其附加到系统PATH变量(C:\ Python33 \ Lib \ site-packages \ gnome)
现在,当我将整个项目打包并在机器上运行它时捆绑在一切看起来很好。我将它移动到没有安装python的机器上,它看起来......不同。现在不同并不意味着坏(虽然它已经恢复的字体很差而且必须改变)但我想了解原因。
C:\ Python33 \ LIB \站点包\侏儒\等\ GTK的3.0 \的Settings.ini
[设置]
gtk-theme-name = Adwaita ...
外观似乎是“Adwaita”。 现在捆绑的/ cx_freeze版本将密钥库/目录(包含共享/主题...)复制到工作目录中,但不应用主题。 我甚至将整个C:\ Python33 \ Lib \ site-packages \ gnome \目录复制到工作目录中以查看它是否可以执行任何操作。确保我不会错过任何东西......我没有
这是奇怪的部分。正如我在机器上提到的那样很好。如果我复制整个 C:\ Python33 \ Lib \ site-packages \ gnome \进入工作目录,再好了。 如果我然后做类似的事情:
C:\ Python33 \ Lib \ site-packages \ gnome \ - > C:\ Python33 \ LIB \站点包\ gnome1
我在我的机器上获得了与没有安装python的其他人相同的视觉变化。 这指向仍然存在一些对GTK_DATA_PREFIX的信息/指针/绝对引用,即C:\ Python33 \ Lib \ site-packages \ gnome \,这样就不会解析任何其他位置。
有谁知道还有什么需要允许冻结的pygobject应用程序加载主题?
- 编辑 -
靠近一点。不仅影响了主题,还影响了模式(在我的案例中是文件选择器)。
我让cx_freeze将所有DLL / pyd转储到子文件夹(bin)中,并设置了一些is.environ变量以允许它工作(matplotlib数据,GI_typedef和扩展路径到./bin)
如上所述,主题和架构不起作用但是如果我将所有内容从bin复制到它运行的根目录。
我将它列入bin / etc /和bin / share / gtk-3.0 / schemas
这指出需要一些额外的变量
if getattr(sys,'frozen',False):
# if trap for frozen script wrapping
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin'))
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin\\library.zip'))
os.environ['TCL_LIBRARY'] = os.path.join(os.path.dirname(sys.executable),'bin\\tcl')
os.environ['TK_LIBRARY'] = os.path.join(os.path.dirname(sys.executable),'bin\\tk')
os.environ['MATPLOTLIBDATA'] = os.path.join(os.path.dirname(sys.executable),'bin\\mpl-data')
os.environ['GI_TYPELIB_PATH'] = os.path.join(os.path.dirname(sys.executable),'bin\\lib\girepository-1.0')
os.environ['GTK_HOME'] = os.path.join(os.path.dirname(sys.executable),'bin')
os.environ['GTK_BASEPATH'] = os.path.join(os.path.dirname(sys.executable),'bin')
os.environ['GSETTINGS_SCHEMA_DIR'] = os.path.join(os.path.dirname(sys.executable),'bin\\share\glib-2.0')
os.environ["PATH"] += os.pathsep + os.path.join(os.path.dirname(sys.executable),'bin')
有人会碰巧知道其他变量吗?