negin12 发表于 2023-7-18 11:01:36

PySimpleGUI报错: couldn't recognize image data

求搭救,代码如下:
import PySimpleGUI as sg
import base64

f=open(r'C:\Users\Administrator\Desktop\测试4\3.png','rb')
#读取内容转换为base64编码
is_f=base64.b64decode(f.read())
f.close()

layout=[]
window=sg.Window('按钮图形',layout,keep_on_top=True)

while True:
    event,values=window.read()
    print(event)

    if event==None:
      break
window.close()

报错提示:Button element error couldn't recognize image data

陶远航 发表于 2023-7-18 11:01:58

根据你提供的代码和错误提示,问题可能出在图像的加载上。PySimpleGUI 的 Button 元素可以通过参数 image_data 加载图像数据,但是需要满足一定的条件。

首先,确保图片文件路径是正确的,并且可读取。你可以检查文件路径是否正确,以及确认图片文件存在。

其次,确认你使用的是正确的图像格式。PySimpleGUI 支持常见的图像格式,如 PNG、JPEG 等。请确保你的图片文件是支持的格式,并且没有损坏。

最后,确保将图像数据正确转换为 base64 编码,并传递给 image_data 参数。你的代码中已经使用了 base64.b64decode() 来进行解码,但是需要确认文件的读取和解码过程没有出错。

使用 PySimpleGUI 加载图像的示例代码如下:

import PySimpleGUI as sg
import base64

# 读取图片文件并转换为 base64 编码
with open(r'C:\Users\Administrator\Desktop\测试4\3.png', 'rb') as f:
    image_data = base64.b64encode(f.read())

layout = []
window = sg.Window('按钮图形', layout)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
      break

window.close()


请确保你的代码中图片文件的路径正确,而且可读取。如果问题仍然存在,请检查图片文件的格式和完整性,以及图像数据转换的过程是否正确。如果问题仍然无法解决,请提供更详细的错误信息以便进行进一步的排查。

isdkz 发表于 2023-7-18 11:02:04

在你的代码中,问题出现在图像数据转换的部分。PySimpleGUI 中的Image和Button元素可以接受base64编码的数据,但它们实际上需要的是base64编码的 **字符串**,而不是通过base64.b64decode()得到的字节数据。在你的代码中,你试图将一个解码的base64数据直接传递给Button元素,这导致了错误。

此外,你应该使用base64.b64encode()而不是base64.b64decode() ,因为b64encode()会将二进制数据编码为base64数据,而b64decode()是将base64数据解码为二进制数据。

下面是修复后的代码:

import PySimpleGUI as sg
import base64

# 读取文件并进行 base64 编码
with open(r'C:\Users\Administrator\Desktop\测试4\3.png', 'rb') as f:
    is_f = base64.b64encode(f.read()).decode('utf-8')

layout = []
window = sg.Window('按钮图形', layout, keep_on_top=True)

while True:
    event, values = window.read()
    print(event)

    if event == None:
      break
window.close()


在此修复的代码中,我们使用with open...结构来读取文件,这是一种更安全的方式,可以确保文件在读取后被正确地关闭。另外,我们使用base64.b64encode()对文件内容进行base64编码,然后使用.decode('utf-8')将字节编码转换为字符串编码,以满足 PySimpleGUI 的需求。

negin12 发表于 2023-7-18 11:25:14

isdkz 发表于 2023-7-18 11:02
在你的代码中,问题出现在图像数据转换的部分。PySimpleGUI 中的Image和Button元素可以接受base6 ...

感谢感谢,原来是我把b64encode看错了,点了b64encode。with open和decode('utf-8')的提醒,谢谢啦!!!

negin12 发表于 2023-7-18 11:25:47

陶远航 发表于 2023-7-18 11:01
根据你提供的代码和错误提示,问题可能出在图像的加载上。PySimpleGUI 的 Button 元素可以通过参数 image_d ...

找到问题啦,谢谢~~~
页: [1]
查看完整版本: PySimpleGUI报错: couldn't recognize image data