PySimpleGUI 无法显示 .jpg,只能显示 .png。如何在不触及原始文件的情况下将 .jpg 临时转换为 .png?

PySimpleGUI can't display a .jpg, only a .png. How can I temporarily convert the .jpg to a .png without touching the original file?

代码很简单

如果我使用此代码 (...{file_name}.jpg"),它会给我:“无法识别图像文件“.\downloaded_cards551.jpg”中的数据。只有当我使用图像和代码的 .png 版本时,它才有效。

但是,我不想更改我的实际文件或将它们复制到我的文件夹中。有没有什么办法可以在点击“显示”时暂时做到这一点,而不用改变原来的文件夹?

import PySimpleGUI as sg

layout = [
    [sg.Button("Show")],
    [sg.Image(key="myimg")],
]

window = sg.Window("Test", layout)

while True:
    event, values = window.read()
    if event == "Exit" or event == sg.WIN_CLOSED:
        break

    if event == "Show":
        file_name = "27551"
        file_image = f".\downloaded_cards\{file_name}.jpg"
        window["myimg"].update(file_image)

您可以使用包调用 Pillow(通过 pip install pillow 安装)。这是 PIL.

的分支

首先,像这样导入枕头:from PIL import Image, ImageTk

然后,您可以像这样打开图像文件:img = Image.open('file_path_here')

终于可以做成这样了

window['myimg'].update(
    data=ImageTk.PhotoImage(img),
)

完整代码:

import PySimpleGUI as sg
from PIL import Image, ImageTk #Image for open, ImageTk for display

layout = [
    [sg.Button("Show")],
    [sg.Image(key="myimg")],
]

window = sg.Window("Test", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED: #There is no key call Exit so event == "Exit" is unimportant
        break

    if event == "Show":
        file_name = "27551"
        image = Image.open(f"./downloaded_cards/{file_name}.jpg") #I prefer /
        window["myimg"].update(
            data = ImageTk.PhotoImage(file_image)
        ) #update the myimg key