如何将路径无关的映像加载到pythontkinter中,使可执行文件独立于映像路径?

2024-09-27 09:32:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用spyder 3.2.8python 3.6使用tkinter进行编程。设置我的整个脚本并使用pyinstaller开发应用程序。在

在我的脚本中,我希望包含函数iconbitmap('')。问题是,一旦我这样做,我指定了一个图像路径,当我开发应用程序时,它会在我将应用程序移动到另一台电脑时产生一个错误

我知道为什么会发生这个错误。这是因为指定的文件路径在新电脑上不存在

我想用这个功能来改变widget图标。它的工作原理和我在脚本中说的一样,但是一旦我开发并从一台电脑转移到另一台电脑,它就找不到有问题的图像,因此产生了问题。在

这是我要运行的代码的特定部分:

window= tk.Tk()
window.title("Heating Requirement")
window.geometry("650x275")


window.iconbitmap(r'LOGO.ico')

如您所见,它很简单,但依赖于路径。在

在我的剧本里,它运行得非常完美。 然而,问题如上所述,图像是路径相关的。在

有没有一种方法可以告诉pyinstaller更改iconbitmap,而不是在依赖于路径的脚本中进行更改。。。。在

如果告诉pyinstaller更改应用程序图标,那么它与路径无关,因为它将映像合并到构建中。我希望pyinstaller也将iconbitimage合并到构建中。在

是否有外部方法可以更改iconbitimage。在剧本之外的意思?在

有没有办法永久改变tkinter中的图标位图?在


Tags: 方法图像路径脚本应用程序tkinter错误window
2条回答

几个月前我弄明白了只是忘了贴答案:

第一步:在脚本中写下:

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)

Seconly:通过pyinstaller运行完成的脚本,让它创建一个spec文件(在与.py和.spec文件相同的窗口中打开的cmd中):

^{pr2}$

第三:定位创建的程序_名称.规格文件低于你的程序_名称.py编写脚本并打开程序_名称.规格用记事本。在

第四:现在复制并粘贴以下信息到规范文件,并更改必要的信息。在

# -*- 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

假设你已安装应用程序

/home/aston/app/script.py

然后你可以把图像放到

^{pr2}$

从剧本中引用

import os
dirname = os.path.dirname(__file__)
os.path.join(dirname, "image", "foo.png")

它将获取当前脚本的路径并附加image/foo.png

现在假设你把它复制到你朋友鲍勃的电脑上

/home/bob/app/script.py

以及

/home/bob/app/image/foo.png

图像仍在路径image/foo.png相对script.py的位置,因此脚本中构建的路径仍然是正确的

相关问题 更多 >

    热门问题