使用字典中的PNG文件在PySimpleGUI(Python)的“图像”小部件中显示

我有使用PySimpleGUI的Python GUI,它需要显示多个图形,我打算通过一组按钮进行导航。我知道我可以将所有图保存为PNG到给定的文件夹中,只需将它们加载到Image对象中,然后在单击按钮时使用元素的Update方法加载新图像。

类似以下的方法效果很好:

[sg.Image(filename=os.getcwd() + pngFileName,key='key1',size=(5,6))]

我需要传递要从当前目录中读取并显示在“图像”窗口小部件中的图的文件名。

但这意味着我将所有文件保存在一个文件夹中,而我更希望将所有PNG放在字典中,并在需要将给定文件名传递给sg.Image()时引用该字典。

我看到的优点是,这样一来,我不必占用硬盘驱动器上的空间来存储PNG,而且不必写然后从磁盘上读取,我想它会更快。直接从运行时内存中的字典中获取。

我无法实现此目标,因为代码似乎期望文件名具有特定路径,而不是传递包含PNG的字典的特定值。

我该如何实现?

long0103 回答:使用字典中的PNG文件在PySimpleGUI(Python)的“图像”小部件中显示

  

问题:使用字典中的PNG文件在PySimpleGUI(Python)的“图像”小部件中显示


  

git log --merges --since="since last week" 定义为:

class Image

您可以这样做:

class Image(Element):
    def __init__(self,filename=None,data=None,...):
        """
        :param filename:  (str) image filename if there is a button image. 
                          GIFs and PNGs only.
        :param data:      Union[bytes,str] Raw or Base64 representation of the image
                          to put on button. 
        Choose either filename or data     

类似的事情应该起作用(假设有两个图像:import PySimpleGUI as sg import os cwd = os.getcwd() fname = 'image1.png' with open('{}/{}'.format(cwd,fname)) as fh: image1 = fh.read() [sg.Image(data=image1,key='key1',size=(5,6))] ):

image1,image2
,

PySimpleGUI GitHub上列出的演示程序之一是Demo_Img_Viewer.py。在其中,您将找到一个函数,该函数采用文件名并返回可以传递给update元素的Image方法的数据。

此功能是该演示的一部分。它将文件呈现为update方法期望的格式。

from PIL import Image

def get_img_data(f,maxsize=(1200,850)):
    """
    Generate image data using PIL
    """
    img = Image.open(f)
    img.thumbnail(maxsize)
    bio = io.BytesIO()
    img.save(bio,format="PNG")
    del img
    return bio.getvalue()

您可以遍历文件并通过调用此函数并保存结果来“预渲染”它们。

然后,您可以使用这些预渲染图像之一更新图像元素。

window['My Image Element Key'].update(data=rendered)

本文链接:https://www.f2er.com/3167139.html

大家都在问