【问题标题】:Making exe-file from python with PySimpleGUI and pysimplegui-exemaker使用 PySimpleGUI 和 pysimplegui-exemaker 从 python 制作 exe 文件
【发布时间】:2020-06-18 17:13:54
【问题描述】:

我制作了一个简单的 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-exe文件:

python -m pysimplegui-exemaker.pysimplegui-exemaker

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

根据我@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")

不幸的是,链接给出的以下步骤对我不起作用。有什么提示吗?

【问题讨论】:

    标签: pysimplegui


    【解决方案1】:

    首先,这样做

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

    接下来复制上面的输出并定义一个变量

    CAESAR = b'base64data...'
    layout = [[Sg.Image(data=CAESAR)],
    ...
    

    【讨论】:

      【解决方案2】:

      为了解决这个问题,我们需要专门告诉 Pyinstaller 我们有额外的文件需要与应用程序“捆绑”。

      我们还需要使用“相对”路径,以便应用程序在作为 Python 脚本或 Frozen EXE 运行时可以正常运行。

      您可以在这里找到更详细的答案:Bundling data files with PyInstaller (--onefile)

      【讨论】:

        【解决方案3】:

        几周前,PySimpleGUI 项目发布了一个与 PyInstaller 交互的功能更全的程序....psgcompiler。你可以点安装它。它也可以在 PySimpleGUI GitHub repo 帐户下获得。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 1970-01-01
          • 2022-11-19
          • 2019-08-12
          相关资源
          最近更新 更多