我正在spyder 3.2.8
中编程; python 3.6
使用tkinter
。设置我的整个脚本,并使用pyinstaller开发应用程序。
在我的脚本中,我想包含函数iconbitmap('')
。问题是一旦执行此操作,我便指定了图像路径,并且在开发应用程序时,将应用程序移至另一台PC时会产生错误。
我知道为什么会发生此错误。这是因为指定的文件路径在新PC上不存在。
我想使用该功能更改小部件图标。它的工作方式就像我在脚本中所说的那样,但是一旦我开发并从一台PC转移到另一台PC上,它就找不到所要查找的图像,从而造成了问题。
这是我要运行的代码的特定部分:
window= tk.Tk()
window.title("Heating Requirement")
window.geometry("650x275")
window.iconbitmap(r'LOGO.ico')
如您所见,它很简单,但与路径有关。
在我的脚本中,它运行完美。 但是,如上所述,问题在于图像与路径有关。
是否有一种方法可以告诉pyinstaller更改iconbitmap而不是在脚本中进行更改,从而使其依赖于路径。...
如果您告诉pyinstaller更改应用程序图标,则它与路径无关,因为它会将映像合并到构建中。我希望pyinstaller也将iconbitimage合并到构建中。
也许有一种外部方式可以更改iconbitimage。在脚本之外是什么意思?
是否可以在tkinter中永久更改iconbitimage?
答案 0 :(得分:1)
假设您的应用程序位于
/home/aston/app/script.py
然后您可以将图像放入
/home/aston/app/images/foo.png
并从脚本中引用为
import os
dirname = os.path.dirname(__file__)
os.path.join(dirname, "image", "foo.png")
它将采用当前脚本的路径并附加image/foo.png
现在说您将其复制到朋友bob的计算机上,并且现在拥有
/home/bob/app/script.py
和
/home/bob/app/image/foo.png
图像仍位于image/foo.png
相对位置的script.py
相对路径中,因此脚本中的构建路径仍然正确
答案 1 :(得分:0)
所以我知道几个月前我才忘记发布答案:
第一步:编写脚本:
def resource_path(relative_path):
#""" Get absolute path to resource, works for dev and for PyInstaller """
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
image_path = resource_path("LOGO.ico")
window= tk.Tk()
window.iconbitmap(image_path)
第二:通过pyinstaller运行完成的脚本,并让它创建一个spec文件(在与.py和.spec文件相同的窗口中打开的cmd中):
pyinstaller.exe -f -F program_name.py
第三:在program_name.py脚本下面找到创建的program_name.spec文件,并使用NotePad打开program_name.spec。
第四:现在将以下信息复制并粘贴到规格文件中,并更改必要的信息。
# -*- mode: python -*-
a = Analysis(['C:\\Users\\Aston
\\AppData\\Local\\Programs\\Python\\Python36\\Scripts\\program_name.py'],
pathex=['C:\\Users\\Aston
\\AppData\\Local\\Programs\\Python\\Python36\\Scripts'],
hiddenimports=[],
hookspath=None)
a.datas += [ ('image_name.ico', 'C:\\Users\\Aston
\\AppData\\Local\\Programs\\Python\\Python36\\Scripts\\Image_name.ico', 'DATA')]
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'What ever you want to name program.exe'),
debug=False,
strip=None,
upx=True,
console=False , icon='C:\\Users\\Aston\\AppData\\Local\\Programs\\Python\\Python36\\Scripts\\image_name.ico')
记住要保存规格文件。
第五:现在再次运行pyinstaller,但是这次使用(在与.py和.spec文件相同的窗口中打开的cmd中):
pyinstaller.exe -f -F program_name.spec