冷冻pygobject应用程序和主题

时间:2014-03-05 23:08:18

标签: python cx-freeze pygobject

我差不多完成了从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')

有人会碰巧知道其他变量吗?

0 个答案:

没有答案