簡體   English   中英

PyInstaller 不會將 PyQt 的圖像加載到 GUI

[英]PyInstaller won't load the PyQt's images to the GUI

將我的腳本傳遞到可執行文件時遇到了一些麻煩,但我終於成功了。 主要問題是 PyInstaller 不會將圖像加載到 GUI。

它應該是這樣的:

它應該是什么樣子

這是它的樣子:

它看起來如何

而且我似乎找不到問題,這是 .spec 文件:

a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programa.py'],
             pathex=['img', 'C:\\Users\\Poblet\\ManGet\\HeyMang\\pyinstaller'])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=1,
          name=os.path.join('build\\pyi.win32\\Hey Mang!', 'Hey Mang!.exe'),
          debug=False,
          icon='heymang.ico',
          strip=False,
          upx=True,
          console=False )
coll = COLLECT( exe,
               Tree('C:\\Users\\Poblet\\ManGet\\HeyMang\\pyinstaller\\img'),
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name=os.path.join('dist', 'Hey Mang!'))
app = BUNDLE(coll,
             name=os.path.join('dist', 'Hey Mang!.app'))

它應該抓取這些圖像,就像它在這里所說的那樣:

Warnings written to C:\Users\Poblet\ManGet\HeyMang\pyinstaller\Hey Mang!\warnHey Mang!.txt
checking PYZ
rebuilding outPYZ1.toc because outPYZ1.pyz is missing
building PYZ outPYZ1.toc
checking PKG
rebuilding outPKG3.toc because outPKG3.pkg is missing
building PKG outPKG3.pkg
checking EXE
rebuilding outEXE2.toc because Hey Mang!.exe missing
building EXE from outEXE2.toc
I: SRCPATH [('heymang.ico', None)]
I: Updating icons from ['heymang.ico'] to c:\users\poblet\appdata\local\temp\tmpr34zmp
I: Writing RT_GROUP_ICON 0 resource with 76 bytes
I: Writing RT_ICON 1 resource with 1128 bytes
I: Writing RT_ICON 2 resource with 4264 bytes
I: Writing RT_ICON 3 resource with 9640 bytes
I: Writing RT_ICON 4 resource with 16936 bytes
I: Writing RT_ICON 5 resource with 67624 bytes

它們在文件夾中,但由於某種原因它們不起作用。

完整的源代碼(減去 PyInstaller 文件)在這里

我感謝您的幫助。

我能夠解決這個問題,這也應該對其他人有所幫助:

  • 使用以下命令創建 .spec 文件:

     python Makespec.py --noconsole --icon="youricon.ico" --name="App name" program.py
  • 打開 .spec 文件(例如:App 名稱/App 名稱.spec),您應該會看到如下內容:

     a = Analysis([ os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'program.py' ], pathex=[ 'C:\\Your\\User\\Path\\To\\pyinstaller' ]) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, exclude_binaries=1, name=os.path.join('build\\pyi.win32\\App Name', 'App Name.exe'), debug=False, strip=False, upx=True, console=False, icon='youricon.ico' ) coll = COLLECT( exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name=os.path.join('dist', 'Hey Mang,') ) app = BUNDLE(coll. name=os.path,join('dist'. 'Hey Mang!.app'))

    a.binaries之前你應該添加這段代碼:

     Tree('C:\\Your\\App\\Path\\To\\Images'),

    所以當 PyInstaller 讀取.spec 文件時,編譯器會將圖像傳遞到dist目錄。

  • 現在我們需要創建.qrc 文件,它將加載我們的圖像。 這個文件應該看起來像這樣:

     <RCC> <qresource prefix="/" > <file>img/image1.png</file> <file>img/image2.png</file> <file>img/image3.png</file> </qresource> </RCC>

    很明顯,用你的圖片。 而這需要編譯成.py格式,使用以下命令:

     pyrcc4 -o images.qrc images_qr.py
  • 最后,我們需要將其添加到我們的腳本中,例如:

     import images_qr... self.setWindowIcon(QtGui.QIcon(':/img/image1.png')) # The colon must be there

編譯后,您應該可以很好地看到圖像,如下所示:

我希望這可以幫助每個人解決同樣的問題。 請記住提供正確的圖像路徑並將冒號添加到圖像中。

快速更新以下方法。 首先 - 這是在 PyQt/Pyside 應用程序中輕松包含圖像的好方法。 對於 Pyside,只需使用 pyside-rcc.exe 而不是 pyrcc4。

其次,我什至不相信Tree(...)命令是必要的。 使用此方法創建 dist 文件夾后,我刪除了使用Tree..命令復制的所有圖像文件。 我的可執行文件仍然有效並且圖像顯示正確。 因此,我們可能只需要創建 qrc 文件並運行 pyrcc 程序,確保 python 模塊使用冒號前綴更新到 iamge 文件路徑。

如果您使用的是 Qt Designer,則可以毫不費力地添加圖標和圖像。 按照這里的教程http://doc.qt.io/qt-4.8/designer-resources.html

使用 Qt Designer 4.8.5 和 Pyinstaller 2.1 在 PySide 1.2.2 上測試

將 exe 文件移動到圖像文件夾所在的文件夾或 main.py 所在的同一文件夾中。

看到這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM