使用Pyinstaller 2.0,PySide 1.1.2 Bindings和Qt 4.8时如何在应用程序中包含图标

时间:2013-04-07 20:04:09

标签: python pyside pyinstaller qt4.8

什么脚本看起来像 what_it_looks_like

应用程序应该是什么样的

enter image description here

在发布之前,我已经查看了以下问题并试图将其用作指南,以使我的脚本正常工作,但它的使用很少

PyInstaller won't load the PyQt's images to the GUI

它做得最好的是在结果目录中包含我的图标,如下所示

(此处包含图片)

以及下一个 我不知道它甚至说什么,但我觉得如果我知道它可以解决我的问题 实际上是做什么的, Bundling data files with PyInstaller (--onefile)

我有rtfm,不幸的是大部分都超过了我的头脑。以下部分 我认为这与我的问题有关

http://www.pyinstaller.org/wiki/Recipe/CollectDatafiles

我不知道如何在我的spec文件中实际实现它

同样如下 http://www.pyinstaller.org/export/v2.0/project/doc/Manual.html?format=raw#accessing-data-files

Access Data Files

我已完成以下内容及其变体,包括使用-F参数

我使用pyside-uic.exe转换了我的mainWindow.ui文件,将其转换为mainGui.py文件

然后将icons.qrc转换为icons_rc.py 使用pyside-rcc.exe进行转换

(注意:我在将最初的exe副本放入PySide文件夹后转换了文件 进入我的路径中的C:\ Python27 \ Scripts文件夹,以便我可以从任何地方调用它。

我将图标存储在图标文件夹

使用Pyinstaller在我的控制台中生成可执行文件我使用了以下命令 制作我的spec文件

C:\ Pyinstaller-2.0> python utils \ Makespec.py --windowed --name =" 16TangoTest" C:\ Exmake \ 16MainWindowVideo.py

制作spec文件后,我将其从pyinstaller文件夹中剪切并添加 到我的Exmake文件夹

然后我修改它以使用

包含我的图标文件夹

树(C:\ Exmake \图标), 并附加它收集 在a.binaries上面的行

手册和上面的第一个答案表明我必须修改我的spec文件,以便pyinstaller看到/找到我的图标,如下图所示 modified_spec

所有这一切都包括我在dist目录中的图标 应用程序仍然没有像上面的第一张图片那样显示它们

然后我通过在控制台中运行以下命令来创建可执行文件 C:\ Pyinstaller-2.0> python pyinstaller.py C:\ Exmake \ 16TangoTest.spec 这使得你在第一张图片中看到的文件夹,包括图标但是 文件夹,但不是运行时的应用程序

2 个答案:

答案 0 :(得分:2)

好的,最后的答案,事实证明,Qt需要以下文件qico4.dll可能与Qt5不同,当在QtDesigner中制作GUI时,它会自动加载所需的所有插件,包括上面的图像插件,但是在转换时除非在脚本中添加以下代码,否则将文件放入python脚本中不会包含它

#:Loads the qico plug-in lets you use .ico icons
QPlugin = QPluginLoader("qico4.dll")

以下文字可能会帮助其他不同情况的人

这是对我自己的问题的部分回答我要感谢上面的Blender,简短的回答是你必须将你的图标从.ico转换为.png文件,问题是你必须完成整个过程再次申请,这些是我采取的步骤 我首先进入了我的图标文件夹并将它们转换为.png图标,我使用了我在这里找到的工具http://www.towofu.net/soft/e-aicon.php我在这个网站找到了这个...我喜欢stackoverflow..ahem

一旦您的图标转换为.png格式,您必须更改.qrc文件,其中包含您的图标信息并使用新图标信息进行更新,我建议您从头开始;一旦你有了新的icons.qrc文件,你就可以在QtDesinger中打开.ui文件并从中删除旧图标的所有实例,然后使用图标/资源文件继续使用新格式化的图标更新它们。

更新完所有图标后,保存并继续转换工作流程,即使用pyside-uic.exe转换器将'your_file.ui'转换为'newly_converted_file.py'。

接下来使用pyside-rcc.exe命令将'icons.qrc'文件转换为'icons_rc.py'

在此过程结束时,您只需要带有.png图标的图标文件夹 你的icons_rc.py文件和你的应用程序脚本。

之后,您可以按照手册继续使用Pyinstaller-2.0。

正如我所说,这是一个部分答案,因为它有效,但是如果其他人可以告诉我或向我解释如何使其与我原来的.ico文件一起工作,那么我怀疑我不会去通过整个过程再次

经过更多研究,此页面特别有用  http://qt-project.org/forums/viewthread/17342

所以我进入了我的Qt4.8文件夹并搜索了qico4.dll并在我脚本所在的文件夹中制作了它的副本并且应用程序运行完美,如果我能找到一种方法将其包含在里面我的脚本然后我想我会有一个完整的答案,问题似乎是Qt而不是Pyinstaller,它似乎需要知道dll才能处理.ico文件

答案 1 :(得分:2)

我遇到了和你一样的问题。在pyinstaller创建我的可执行文件(pyinstaller版本2.1和PySide 1.2.1)之后,所有图标似乎都会丢失。 但是显示了一个.png。

因此,对于PySide中的图标,可能的解决方法是使用.png而不是.ico,它将在双方(python和可执行文件)上工作。

举个例子:

QPushButton(QIcon("./icons/clear.png"),' &Clear',self.app_wgt)