使用PySimpleGUI和pysimplegui-exemaker制作Python的exe文件

3

我制作了一个简单的Python3程序,使用PySimpleGUI创建了一个Windows GUI程序。该程序还包含一个名为CAESAR.png的图片,它与我的Python代码在同一个文件夹中。以下是布局代码的部分:

import PySimpleGUI as sg


layout = [[sg.Image('CAESAR.png')],
          [sg.Text("Geheime Nachricht in GROSSBUCHSTABEN eintippen:")],
          [sg.Multiline(size=(70,4),key="GEHEIM")],
          [sg.Spin([i for i in range(1,26)], initial_value=12, key="SS"), sg.Text("Schlüssel zwischen 1 und 25 wählen")],
          [sg.Radio("Codieren:", "RADIO1", key="XX" ,default=True),
           sg.Radio("Decodieren:","RADIO1", key="YY")],
          [sg.Text("ERGEBNIS:")],
          [sg.Multiline(size=(70,4),key="AUSGABE")],
          [sg.Button("LOS"), sg.Button("ENDE")]]

window = sg.Window("Cäsars Geheimcode", layout)

目前为止,这个工作还不错。现在我想用pysimplegui-exemaker(版本1.3)制作一个Windows可执行文件:

python -m pysimplegui-exemaker.pysimplegui-exemaker

编译后的exe文件在图片CAESAR.png与exe文件在同一文件夹时能够正常运行。如果图片不在与exe文件相同的文件夹中,则会出现错误消息。 问题:我如何强制pysimplegui-exemaker将图片文件“嵌入”到exe文件中,以便该exe文件在没有额外CAESAR.png的情况下正常运行?

根据I @BhargavDesai所给出的答案和链接,我做了以下操作,以获得相对路径:

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)


bild = resource_path("CAESAR.png")

很遗憾,链接给出的步骤对我没有起作用。有什么提示吗?
3个回答

2
为了解决这个问题,我们需要明确地告诉Pyinstaller,我们有一些额外的文件需要与应用程序“捆绑”在一起。
同时,我们需要使用“相对”路径,这样当应用程序作为Python脚本或冻结的EXE运行时才能正常运行。
您可以在此处找到更详细的答案:使用PyInstaller(--onefile)捆绑数据文件

2

首先,进行以下操作

import base64

with open('CAESAR.png', 'rb') as f:
    print(base64.b64encode(f.read()))

接下来复制上面的输出并定义一个变量。
CAESAR = b'base64data...'
layout = [[Sg.Image(data=CAESAR)],
...

1

PySimpleGUI项目几周前发布了一个更加全面的程序与PyInstaller进行接口交互... psgcompiler。你可以使用pip命令安装它。此外,它也可以在PySimpleGUI的GitHub存储库中找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接