首页 > 编程问答 >使用 tk.PhotoImage 在 tkinter 窗口中加载 .jpg 图像时出错

使用 tk.PhotoImage 在 tkinter 窗口中加载 .jpg 图像时出错

时间:2024-07-29 06:49:40浏览次数:11  
标签:python user-interface tkinter python-imaging-library yolov5

问题: 我正在开发一个 tkinter 应用程序,我需要在 GUI 中显示图像。虽然加载 .png 图像工作得很好,但在尝试使用 tk.PhotoImage 加载 .jpg 图像时遇到了困难。

这是我正在使用的代码片段:

`...
# Function for the additional button click action
def additional_function():
    try:
        image_path = "output/exp/img.jpg"
        image = tk.PhotoImage(file=image_path)
        img_label.config(image=image)
        img_label.image = image  # to keep a reference
    except Exception as e:
        print(f"Error loading image: {e}")

button2 = tk.Button(root, text="Show The Result", command=additional_function, bg="red", highlightthickness=0)
button2.config(font=("Helvetica", 14, "bold"), fg="white")
button2.place(relx=(start_x + end_x) / 2 / root.winfo_screenwidth(), rely=(sum(row_heights[:y]) + row_heights[y] + 600) / root.winfo_screenheight(), anchor=tk.CENTER)`
...`

但是,当尝试加载 .jpg 时图像,我遇到以下错误:

Error loading image: couldn't recognize data in image file "output/exp/img.JPG"

我将不胜感激任何有关解决此问题的见解或建议。先感谢您。


问题在于 tk.PhotoImage 不直接支持 .jpg 文件。它主要支持 .png .gif 格式。

要在 tkinter 中使用 .jpg 图像,你需要使用 Pillow (PIL) 库。Pillow 是 Python 图像处理库,它允许你打开、操作和保存多种图像格式,包括 .jpg

以下是使用 Pillow 加载和显示 .jpg 图像的步骤:

  1. 安装 Pillow: 如果你还没有安装 Pillow,可以使用 pip 安装:

bash pip install pillow

  1. 更新你的代码: 使用 Pillow 打开 .jpg 图像,然后将其转换为 tk.PhotoImage

```python from PIL import Image, ImageTk import tkinter as tk

# ... 你的其他代码 ...

def additional_function(): try: image_path = "output/exp/img.jpg" # 使用 Pillow 打开图像 image = Image.open(image_path) # 将 Pillow 图像转换为 tk.PhotoImage image = ImageTk.PhotoImage(image) img_label.config(image=image) img_label.image = image # 保留引用 except Exception as e: print(f"Error loading image: {e}")

# ... 你的其他代码 ... ```

在这个更新后的代码中:

  • 我们首先使用 Image.open() 从 Pillow 打开 .jpg 图像。
  • 然后,我们使用 ImageTk.PhotoImage() 将打开的 Pillow 图像转换为 tk.PhotoImage 对象。
  • 其余的代码保持不变,因为它现在处理的是 tk.PhotoImage 对象。

通过这些更改,你的 tkinter 应用程序现在应该能够加载和显示 .jpg 图像,而不会出现任何问题。

标签:python,user-interface,tkinter,python-imaging-library,yolov5
From: 78789835

相关文章

  • 如何用Python制作Android服务?
    我想构建一个简单的Android应用程序,例如PushOver应用程序,它具有TCP服务器并接收其记录的文本消息,然后将其作为推送通知发送。这部分已经完成并且工作正常。但即使GUI应用程序关闭,我也想接收消息。我知道这是可能的,因为PushOver应用程序做到了!我想,我可能需要一......
  • Python Discord Bot 的应用程序命令的区域设置名称(多语言别名)
    如何根据用户的语言设置,使应用程序命令的名称具有不同的名称例如,如果一个用户将其discord的语言设置为英语,则用户可以看到英语的应用程序命令名称。另一方面,如果另一个用户将其不和谐语言设置为法语,则用户可以看到法语中的相同应用程序命令的名称。为此,我尝试使用ap......
  • 如何在Python中添加热键?
    我正在为游戏制作一个机器人,我想在按下热键时调用该函数。我已经尝试了一些解决方案,但效果不佳。这是我的代码:defstart():whileTrue:ifkeyboard.is_pressed('alt+s'):break...defmain():whileTrue:ifkeyboard.is_pr......
  • 在Python中解压文件
    我通读了zipfile文档,但不明白如何解压缩文件,只了解如何压缩文件。如何将zip文件的所有内容解压缩到同一目录中?importzipfilewithzipfile.ZipFile('your_zip_file.zip','r')aszip_ref:zip_ref.extractall('target_directory')将......
  • 如何在Python中从RSA公钥中提取N和E?
    我有一个RSA公钥,看起来像-----BEGINPUBLICKEY-----MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAvm0WYXg6mJc5GOWJ+5jkhtbBOe0gyTlujRER++cvKOxbIdg8So3mV1eASEHxqSnp5lGa8R9Pyxz3iaZpBCBBvDB7Fbbe5koVTmt+K06o96ki1/4NbHGyRVL/x5fFiVuTVfmk+GZNakH5dXDq0fwvJyVmUtGYA......
  • Swagger、Docker、Python-Flask: : https://editor.swagger.io/ 生成服务器 python-fl
    在https://editor.swagger.io/上您可以粘贴一些json/yaml。我正在将此作为JSON进行测试(不要转换为YAML):{"swagger":"2.0","info":{"version":"1.0","title":"OurfirstgeneratedRES......
  • 使用 Matplotlib 的 Python 代码中出现意外的控制流
    Ubuntu22.04上的此Python3.12代码的行为符合预期,除非我按q或ESC键退出。代码如下:importnumpyasnp,matplotlib.pyplotaspltfrompathlibimportPathfromcollectionsimportnamedtuplefromskimage.ioimportimreadfrommatplotlib.widgets......
  • 参考 - Python 类型提示
    这是什么?这是与在Python中使用类型提示主题相关的问题和答案的集合。这个问题本身就是一个社区维基;欢迎大家参与维护。这是为什么?Python类型提示是一个不断增长的话题,因此许多(可能的)新问题已经被提出,其中许多甚至已经有了答案。该集合有助于查找现有内容。范......
  • 我的 Python 程序中解决 UVa 860 的运行时错误 - 熵文本分析器
    我正在尝试为UVa860编写一个解决方案,但是当我通过vJudge发送它时,它一直显示“运行时错误”。fromsysimportstdinimportmathdefmain():end_of_input=Falselambda_words=0dictionary={}text_entropy=0relative_entropy=0whilenotend_of_in......
  • Python进度条
    当我的脚本正在执行某些可能需要时间的任务时,如何使用进度条?例如,一个需要一些时间才能完成并在完成后返回True的函数。如何在函数执行期间显示进度条?请注意,我需要实时显示进度条,所以我不知道该怎么办。我需要thread为此吗?我不知道。现在在执行函数......